- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:派生クラスのメンバを基底クラスの参照に代入(C++)
派生クラスのメンバを基底クラスの参照に代入(C++)
このQ&Aのポイント
- 派生クラスのメンバを基底クラスの参照に代入することは問題ありませんか。
- 派生クラスのコンストラクタ内で派生クラスメンバの参照に対して何かしなければ、参照は有効です。
- 派生クラスのコンストラクタ実行後であれば問題なく動作します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
継承は、子が親を知っている状態です。 お話しされているクラスは、親が子を知っている状態で、関係が反転しています。 これは非常に難解な状況で、子の処理結果を親が受け取りたいということなら、 テンプレートメソッドなどで対応するべきです。
その他の回答 (2)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
回答No.3
文法上は問題ないけど、それで何をしたいか/何を意図してのことかが気になるところ。 それによってはもっと素直(?)な解決策があるやもしれず。
質問者
お礼
ありがとうございました。
質問者
補足
例をint型で書いてしまいましたが、 正確には、派生クラス(B, C)ごとに 用意するクラス(Super1, Super2)が異なるとき、 基底クラス(A)に処理を書きたいので、 その参照を渡したいというものでした。 struct Base { }; struct Super1: public Base { }; struct Super2: public Base { }; struct A { Base& m_ref; A(Base& ref) : m_ref(ref) { } }; struct B : public A { Super1 m_obj; B() : A(m_obj) { } }; struct C: public A { Super2 m_obj; C() : A(m_obj) { } };
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
たぶん動くとは思う. ただ, 「設計をやり直せ」と突き返されても文句は言えないんじゃないかなぁ.
質問者
お礼
ありがとうございました。やはり違和感ある構成ということですね。
お礼
ご回答ありがとうございました。 例をint型で書いてしまいましたが、 もう少し正確には、No.3で頂いた回答の補足に 書かせて頂いた内容を目的としていました。 ご提案とはずれるかもしれませんが、 テンプレートクラスで同じようなことが可能で、 こちらの方がご指摘の問題に対して下記の例のように 正しいと感じましたので、書き直しを始めました。 struct Base { }; struct Super1: public Base { }; struct Super2: public Base { }; template <class T> struct A { T m_ref; }; typedef A<Super1> B; typedef A<Super2> C;