コンストラクタが勝手に代入してくれてうれしいんだけど、なんか不思議
状況
- クラスBがクラスAを所有
- クラスCのコンストラクタがクラスBを引数として要求
って状況の時にクラスCのコンストラクタにクラスAのオブジェクトを渡しても動作しますよと。これを継承を使わないできましたよと。
ミソはクラスBにクラスAのオブジェクトを引数としたコンストラクタを用意しておく点。
#include <iostream> using namespace std; class A { public: A(){} A(int x): val(x){} int val; }; class B { A a_; public : B(const A &a){ a_.val = a.val; } int EvaluateA() const{ return a_.val; } }; class C { public : C(const B& b){ cout << b.EvaluateA() << endl; } }; int main() { A *a = new A(10); C *c = new C(*a); delete c; delete a; return 0; }
勝手にBのコンストラクタ呼んでコピーしてくれてるんだろうけど、なんか不思議な挙動。