【初心者歓迎】C/C++室 Ver.55【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0286デフォルトの名無しさん
2008/06/21(土) 22:39:43自分の参考書には書いていなくて、細かすぎてググるにも探しきれませんでした。
C++で、
クラスCが、仮想基底クラスA(パブリック派生)をもつクラスBから、パブリック派生した場合…
つまり
A->B→C
(説明のために、->は基底クラスによるパブリック派生、→は通常のパブリック派生とします。
このとき、AにはAのデータの、BにはAの、CにはBのコンストラクタ初期化子が記述されているんですが、
Cを初期化するときに、自動的にBの、そしてそこからAのコンストラクタが呼び出されて欲しいところなんですが、
どうやらBのコンストラクタを呼び出そうとする前に、Aのコンストラクタが呼び出されるみたいなんです。
(それによってコンパイラからAのデフォルトコンストラクタを求められる。
BにAのコンストラクタ初期化子がせっかくあるのにCにまた書かなければならないというのはおっくうです!
これが悩みです。。
CにAのコンストラクタ初期化子を書けば解決するのですが、
例えばA->B->C->D…などと派生する場合、派生したクラスの初期化子を全て書かなくてはいけなくなり、不便です。
また、もちろんvirtualを取ってA→B→Cとした場合も解決しますが、
どうしても仮想派生がしたい場合もあります。
コンパイラのせい等もあるのでしょうか?自分の理想通りに仮想派生する方法はあるのでしょうか?
だれか分かる方、回答をお願いします。
■ このスレッドは過去ログ倉庫に格納されています