[過去ログ] C++相談室 part155 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
929: 2021/05/17(月)17:16 ID:cCPUzk2p(2/2) AAS
C++20のコード晒せるところ、どっかある?
ideoneやcodepadはダメだった
930(1): 2021/05/17(月)17:58 ID:v7SqzMPT(1) AAS
wandbox
931(1): 2021/05/17(月)18:24 ID:rt013aFx(2/6) AAS
>>863
複素数より実数の方が演算が広いから複素数を継承して実数を作る
継承してメンバ関数を増やす
作り方として適切かどうかはともかくとして、
例としては何も間違ってないと思うのだが
932: 2021/05/17(月)18:34 ID:rt013aFx(3/6) AAS
C++的に複素数に順序を取り入れるなら
辞書的順序が一番使われ方として多いかと
コンテナに入れるのに順序が必須な場合とか
std::pair < double, double >
これだって勝手に定義される
C/C++に数学的な汎用性が必須ではないのは
C/C++をやっていればわかると思う
1./-0. < 1./0. とか pow(0,0) = 1 とか数学的には明らかにおかしいでしょ
933: 2021/05/17(月)18:51 ID:pyZ7P5gV(4/6) AAS
まあ辞書順は可能だぬ
934(2): 2021/05/17(月)19:28 ID:xbubPeOw(5/5) AAS
>>931
c++のpublic継承は継承先クラスを継承元クラスと同じものとして扱うので、特性の包含性が重要。
なので、失われる特性があるなら継承はしないほうが良い。
上でも挙がっているけど、複素数は実数の全順序性という特性が失われるので継承はしないほうが良い。やるなら無限体を継承元クラスにすべきだわな。
935: 2021/05/17(月)19:49 ID:pZGof8k7(2/2) AAS
>>910
ブルバギじゃなくて?
936: 2021/05/17(月)20:09 ID:FZJkNpOI(1) AAS
正多面体と素数
動画リンク[YouTube]
937: 2021/05/17(月)20:11 ID:PX9GndkV(1) AAS
何のスレやねん
938(3): 2021/05/17(月)20:51 ID:pyZ7P5gV(5/6) AAS
>>934
継承したからといって継承元クラスで定義される演算を継承したクラスにも引き継がねばならない理由は無い
演算子のオーバーロードと型変換関連のコンストラクタまたはキャスト演算子を定義したら
同じ演算子に対してパラメータの型毎に許す演算と許さない演算を任意に設定できる
特にComplexクラスからRealクラスを派生させた場合は
(この場合は|z|やarg(z)といった複素数の演算子がReal以外の実数を返すComplexのメソッドとすることになりそうだがそれはおくとして
ある意味話は簡単で、Complex同士のoperator<()の一族を定義せずにおもむろにReal同士でだけ定義するだけにしたらええんじゃ
つか個人的にカナーリ疑問なのですだが、AがBの真部分集合であることと、
Aを表すのクラスとBを表すクラスの継承関係は一体追求すべき何の関係があるん??
939(3): 2021/05/17(月)21:58 ID:SfcIGFpx(1) AAS
継承元として振る舞えるのはポリモーフィズムの必須要件じゃない?
親クラスとして振る舞えなくなる子クラスとか存在価値ないでしょ
940(1): 2021/05/17(月)22:27 ID:rt013aFx(4/6) AAS
>>934
は?
複素数を継承して実数を作る
という話だけど
941(1): 2021/05/17(月)22:36 ID:pyZ7P5gV(6/6) AAS
>>939
実数を複素数としてふるまわせたいならRealをComplexに型変換したら済むので継承やポリモーフィズムは必須ではない
>>938の問いに戻るがなんで集合としての包含関係をそう執拗に継承関係に反映させようとするんじゃ……
だいたい実数から複素数を作る演算(|z|とarg(z)で複素数zを作る)もあるし
複素数から実数を作る演算(|z|やarg(z))があるから変換は双方向的なので、
この場合派生クラスから基底クラスへの一方的変換だけでは片手落ちなのは明白
無理矢理やったら>>938に書いたみたく|z|やarg(z)といった複素数の演算子がReal以外の実数を返すみたいなgdgdな話に……
942(1): 2021/05/17(月)22:39 ID:rt013aFx(5/6) AAS
>>941
おまえ文系だろ
>>939に「ポリモーフィズムは必須」なんて書いてない
943: 2021/05/17(月)23:00 ID:hwY+PVbw(1/2) AAS
>>938
>継承したからといって継承元クラスで定義される演算を継承したクラスにも引き継がねばならない理由は無い
さすがに演算が別物レベルで違うのはc++のpublic継承を使うべきじゃない。
public継承は継承元クラスのポインタ変数・参照として使えるという意思表示でもある。使えると言っているのに使えないのはクラスのユーザーを混乱させるし、コンパイラとかからの支援も期待できなくなる。
継承元か継承先かを意識してプログラムしなきゃいけないのは典型的な「継承の危険な使い方」だよ。
944(1): 2021/05/17(月)23:17 ID:hwY+PVbw(2/2) AAS
>>940
えっ、そうなの?
それなら継承の問題は無いと思うけど、継承を使うメリットある? c++だと性能的に不利な気が。
浮動小数から整数を継承するのと似たような臭いがする。
945: 2021/05/17(月)23:39 ID:GYmzER1r(1) AAS
浮動小数と整数は継承関係にない代わりに個別に暗黙変換のルールが作り込まれているわけだから
同列には語れんような。
946(2): 2021/05/17(月)23:53 ID:rt013aFx(6/6) AAS
>>944
元は>>846
>>863が逆だと勘違いしたんだろうねえ
そこから中身のないプライドを保つ為だけの書き込み多数
947: 2021/05/18(火)00:42 ID:pJ71QEbf(1) AAS
>>946
お前頭悪いって良く言われるっしょ
948: 2021/05/18(火)01:40 ID:FUhBCUlD(1) AAS
ここまでのアホみたいな流れは全部>>793のクソコードのせいにして終わり終わり
949: 2021/05/18(火)02:05 ID:0A1+AcfP(1/2) AAS
>>942
>939 は >938 に反論する形で
継承元(Complex)として振る舞えるのは(Realが満足すべき)ポリモーフィズムの必須要件、
と言っているのだから
>ポリモーフィズムは必須」なんて書いてない
なんて大嘘
950: 2021/05/18(火)02:07 ID:0A1+AcfP(2/2) AAS
全く>>946はこの問題でいっぱいレスしている割にガチで頭悪いのではないか
951: 2021/05/18(火)06:07 ID:M8tLf7N/(1/7) AAS
外部リンク:wandbox.org
これの実行結果なんだけど
何で == になるのか誰かわかる?
952: 2021/05/18(火)07:35 ID:iJzvlnxx(1/5) AAS
<=>使ったことないけど==は自分で定義しとかないといかんらしいぞ
あとこれ仮想関数にする必要あるのか疑問(無駄にサイズ増えるし。あと継承もいらん気がする
953: 2021/05/18(火)07:37 ID:M8tLf7N/(2/7) AAS
<=>から==を導出させるには=default;しなきゃいけないんだけど
=default;した関数の内容を独自なものにするには
virtualで上書きするくらいしか思いつかない
954: 2021/05/18(火)07:40 ID:iJzvlnxx(2/5) AAS
わからんけど、そのpointの大きさ(内積してsqrt)で比較するようなコードをコンパイラが勝手に作ってくれるのけ
955: 2021/05/18(火)07:43 ID:RvkfiLpS(1) AAS
メンバの辞書式順序で比較するコードを勝手に作ってくれる
956: 2021/05/18(火)07:44 ID:M8tLf7N/(3/7) AAS
そんなわけないと思うからこそ=default;した関数の内容を独自の内容に変更したい
957: 2021/05/18(火)07:45 ID:M8tLf7N/(4/7) AAS
メンバの辞書式順序と違う定義にはできんの?
958: 2021/05/18(火)07:47 ID:iJzvlnxx(3/5) AAS
だから==も書かないといけないんじゃね
多分だけど、そのpointの==は中身point_baseの比較しかしてないんでしょ
上下前次1-新書関写板覧索設栞歴
あと 44 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.026s