2012-12-19 5 views
8

私は基本クラスと2つの派生クラスを持っており、派生クラスのオブジェクトへのポインタを例のように他のクラスの1つにコピーする必要があります。2つの派生クラスのC++コピー

class Base 
{ 
public: 
    Base(const Base& other); 
} 

class Derived1 :public Base 
{ 
public: 
    Derived1(const Derived& other): Base(other){...}; 
} 

class Derived2: public Base 
{ 
public: 
    Derived2(const Derived& other): Base(other){...}; 
} 

main() 
{ 
    Derived 1 d1; 
    Derived2 d2(d1) 
} 

私は、派生1つのTIベース(アップキャスト許さ)からパスしようとし、その後にDerived2に*のdynamic_cast *ベースとコピーコンストラクタを呼び出すが、それは動作しません。 2つの派生オブジェクトの間に、両方のオブジェクトのBase部分だけをコピーする必要があります。

+0

Derived2内でDerived1の完全な情報にアクセスする必要がある場合や、その逆の場合は、クラスを強く結合します。おそらく、各クラスのポインタを別のクラスに格納するのではなく、Derived1とDerived2にアクセサー関数を実装し、Derived1とDerived2の両方への参照を格納し、必要なものを計算する別のクラスOperateOnDerivedを実装する方が簡単かもしれません。 – tmaric

答えて

5

基本クラスの部分をコピーするだけの場合は、基本クラスを受け取るコンストラクタを作成します。

Derived2(const Base& other): Base(other){...}; 

Derived1(const Base& other): Base(other){...}; 
関連する問題