C++多重継承
■ このスレッドは過去ログ倉庫に格納されています
0001♯6411
NGNG是非を問うてみたい。非非のオンパレードになりそうだけど。
多態マンセー!
なお、C++BuilderのTObject派生クラスにおいては、
多重継承は許されていません。
0002いんたーふぇーす
NGNG0003デフォルトの名無しさん
NGNGそもそもC++がCoolじゃない。
そもそもC++がHarmful。
0004デフォルトの名無しさん
NGNG満場一致で終了
0005デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNGOWLが良かったよ〜。
0008デフォルトの名無しさん
NGNG世の中は内容を吟味せずにイメージだけで選んじゃう人が大多数だから・・・
(BC++に関してはボーランドが自分でこけた部分もあるようだけど)
0009デフォルトの名無しさん
NGNGインターフェース継承は cool
実装継承は諸刃の剣で、扱いを間違えると辛いわな
>>8
BC++ はライブラリは良くても、コンパイラとデバッガ、エディタが
ねぇ……。SDK への対応が遅れるのも辛い。
0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNG詳細教えて。
0012Ruby
NGNG0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNG0015shige
NGNG0016デフォルトの名無しさん
NGNG0017>16
NGNG0018デフォルトの名無しさん
NGNGそれを多重継承で表現すんのか?
0019デフォルトの名無しさん
NGNG男性にも 地球人のも 引きこもりにも 2ちゃんねらーにも 人という概念が
ルートにあると思われますが? 大丈夫ですね? あなたの実装は
0020デフォルトの名無しさん
NGNGそれは多重継承とはいわない
0021デフォルトの名無しさん
NGNGどうして?
人の属性は全部に含まれると思うけど
0022デフォルトの名無しさん
NGNG}
class eraser{
}
class MitubishiPncil:public pencil,public eraser{
}
0023デフォルトの名無しさん
NGNG{
}
class RRChoroQ: public ChoroQ
{
}
class 4WDChoroQ : public FFChoroQ,RRChoroQ
{
}
で、いいですか?
0024デフォルトの名無しさん
NGNGあなたはいったい何の根拠があって
火星人の引きこもり2ちゃんねらーの
存在を否定するのでしょう?
0025デフォルトの名無しさん
NGNGもしかして、実は誰も多重継承がなにか理解していないとか(藁
0026デフォルトの名無しさん
NGNG1から25まで、みんな逝ってよし。
0027デフォルトの名無しさん
NGNGクラス4WDChoroQは基底クラスChoroQのメンバを
重複して持っているので逝ってよし!
0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNGしまった!
RRとFFが派生じゃなく基底ならいいんだよね?(^^;
0032♯6411
NGNG0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNGでも、多重継承が必要な局面に遭遇したことがない(^^;
0035デフォルトの名無しさん
NGNGJavaもC#もRubyも多重継承なんぞ必要としていないのさ
0036デフォルトの名無しさん
NGNG0037デフォルトの名無しさん
NGNG大規模なら事前/事後にチェックが入るから、
使ったとしても、チェック機構があるゆえ、マトモに動く。
大規模でないのに採用する理由があるか、という話なら興味があるね。
0038デフォルトの名無しさん
NGNG今は違うのかな...
class Mixin<A> extends A
なんてできる言語もあったが。
0039デフォルトの名無しさん
NGNGC++ なら、template でクラス階層に挟み込める。
0040デフォルトの名無しさん
NGNGその名もずばり
「insert class Bar before Foo;」
という構文を使えるマイナー言語を、使ったことがある。
結構愉快だった。
beforeってのは、FooとFooのsuperclassとの間(直前?)に
Barを挟むことが出来るという意味で。
0041デフォルトの名無しさん
NGNGものすごく便利だ 多重継承マンセー
単継承のみなんて面倒臭くて・・
まあ 好き好きだと思いますが
0042デフォルトの名無しさん
NGNGて Mixin も含まれると思うんだが、何について話しているのか明確に
しないと混乱しないか?
>>35
Java にはクラスの多重継承はないが、インターフェースの多重継承は
ある。Ruby も Mixin はできるよね。
0043厨
NGNG多重継承でなければダメって場合もあるのだろうか。
0044ジェームズ
NGNG0045デフォルトの名無しさん
NGNGその議論は、死ぬほど行われている。webなどで検索しろ。
下手にここで振ると厨房であふれるからやめろ。
0046>42
NGNG0047デフォルトの名無しさん
NGNG0048デフォルトの名無しさん
NGNG0049デフォルトの名無しさん
NGNGそれを多重継承というならJavaは多重継承しまくりの言語ということになるが。
0050教えて君
NGNG0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNGで作ってますって告白してるのとおんなじでかなり恥ずかしい行為だぞ。
せめて「工数と相談して止むを得ず採用することも有る」ぐらいにしとけ。
0053デフォルトの名無しさん
NGNGいや、C++ だからこそ明確にしておこうと言ってる。
Ruby や Java ではインターフェース継承、Mixin は実装継承と言語
レベルで区別されてる(実装継承は禁止されている)けど、C++ の場
合は区別されてないから。
>>50
Mixin は多重継承のルール。
まずインスタンスを持たず、Mixin 以外のスーパークラスを持たないク
ラスを Mixin と定義する。次に多重継承する場合、Mixin はいくつ継
承しても構わないが、それ以外のクラスは一つのみに限定する。
こうするとクラス階層が単純な木構造になるので、多重継承した場合に
生じるざまざまな問題を回避しつつ、多重継承のおいしい部分は利用で
きる。
0054デフォルトの名無しさん
NGNGATL/WTL は多重継承前提のライブラリだが、決して継承ツリーを行き
当たりばったりで拡張したわけではない。むしろ、設計は良いと思う
んだが、どうよ?
0055デフォルトの名無しさん
NGNG> ATL/WTL は・・・んだが、どうよ?
って、誰も使ってないでしょ。
0056デフォルトの名無しさん
NGNG>って、誰も使ってないでしょ。
今、仕事でATLを使っているから、誰も使っていないわけではない。
~~~~~
0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNGMixin が可読性を下げるというのは、初めて聞いたな。なにか事例は
あります?
006052
NGNG違いが気にならないなら放置でいいよ。
0061デフォルトの名無しさん
NGNG単に言語が直接サポートしない概念を無理やり実装しても
一般性を欠き結果的に読みづらいコードになるってことでしょ。
別にmixinの有用性を否定しているわけではないと思う。
006252
NGNG援護してもらって申し訳ないが、半分ぐらい否定してる。
0063デフォルトの名無しさん
NGNG0064デフォルトの名無しさん
NGNG精進しなされ。
0065デフォルトの名無しさん
NGNG多重継承しなければコーディングできない例っていうのが実はある。
よく知らないと思われるね。
迂回するためにクラスが爆発的に増えるのが単継承の欠点。
0066デフォルトの名無しさん
NGNG多重継承する奴バカ、大バカ!!
てめーらみたいな低俗低脳がいるから世の中が腐るんだ
氏んで詫びろ!!
0067デフォルトの名無しさん
NGNGよく知らないと思われるね。
と似てる雰囲気の発言かもな
0068デフォルトの名無しさん
NGNGそれぞれが独立でなければ継承出来ないなら入れ子にしてインターフェースで外見を整え
るCのレベルで出来る戦略を通した方が100倍マシかと
0069デフォルトの名無しさん
NGNGディスパッチインタフェースをもったウインドウを実装するのに
CWindowImplとIDispatchImplのふたつの基底クラスを継承するというのは
すごく素直な表現だとおもう。
さらにCOMインタフェースを追加するなら、その分多重継承すればいいし。
ポインタ変換はキャストすればいいだけ。
これに対してMFCのCOMインタフェースは包含によって実装するが
ベースクラスへのポインタを求めるためにおかしなポインタ計算
(結局はコンパイラがやっている多重継承クラスのキャストを自前でやっている)
しなければならない。
0070デフォルトの名無しさん
NGNG多重継承出来る時は多重継承で解決すればいい
あっても移植性を考えて使わないというならそれでいい
無ければクソとかいう発言にはあまり意味がない。
0071デフォルトの名無しさん
NGNG正論すぎ
0072デフォルトの名無しさん
NGNGいい例題と言えるかどうかはしらん。
class ios
class istream :public virtual ios
class ostream :public virtual ios
class iostream:public istream, public ostream
最近のはちょっと違うけど。
0073l
NGNG0074デフォルトの名無しさん
NGNGインターフェースなしでやるとえらい大変なメになるってんなら、これくらいはアリかと思うんだけど。
0075デフォルトの名無しさん
NGNG0076デフォルトの名無しさん
NGNGある種の問題を抱えているような。
まあそれは包含しても集約しても同じか。
0077デフォルトの名無しさん
NGNG何?
0078デフォルトの名無しさん
NGNGバカに刃物を握らせてはいけない
切れる刃ほど怪我をする
0080
NGNG多重継承はデータとメソッドを継承する。
インターフェースはメソッド名のみ継承する。
多重継承の一部を切り取った概念だと理解してるんだけど、、違う?
0081デフォルトの名無しさん
NGNGインターフェースstaticなデータは継承できるでしょ
0082デフォルトの名無しさん
NGNGinterface 継承は実体がないので、多重に継承してもあまり害はない。実装が
一つだけなら vtbl のエントリが複数あっても同じメソッドへのポインタで埋
まるだけだし。
0083デフォルトの名無しさん
NGNGclass A feature
x: INTEGER
y: INTEGER
end
class B inherit A end ; class C inherit A end
class D inherit B rename y as y1
end
C rename y as y2
select y2
end
end
とすると x が仮想継承になって y が非仮想継承になる。
select y2 はC++ふうに書くと
A* a ;
D* d = new D ;
a = d ;
a.y のとき y1とy2 どっちか指定する。
0084デフォルトの名無しさん
NGNG意識する必要があるかどうか、がポイントのような気がするなあ。
■ このスレッドは過去ログ倉庫に格納されています