2011-10-18 14 views
0

どうすればよいですか?私は基本オブジェクトのすべての変数を複合オブジェクトにコピーする複合クラスのメソッドを考えましたが、それは少し不便に思えます。以下のような基本クラスのオブジェクトを複合クラスのオブジェクトに拡張する

class Basic 
{ 
    //basic stuff 
} 

class Complex : public Basic 
{ 
    //more stuff 
} 

Basic * basicObject = new Basic(); 
//now "extending" basicObject and "cast" it to Complex type 
//which means copy everything in basicObject to an complexObject 

か何か:

Complex * complexObject = new Complex(); 
complexObject.getEverythingFrom(basicObject); 

私は基本クラスを変更するたびに、私もこの「コピー」方法を変更する必要があるため、あまりにも不便であるように思われます。

+0

私はあなたが求めているものは、多くの意味があるとは思わない。あなたの目標を述べるほうがいいかもしれません。あなたが最初のステップに決めたものではありません。 –

+0

あなたはおそらく継承とそれがどのように機能するかについてもう少し詳しく読むべきです。 –

+0

これはできません。 'Basic'オブジェクトを作成すると' Complex'を派生させることはできません。さらに、派生クラスはすべて、基底クラス変数を独自のものとして扱います。すべての基本変数に直接アクセスできる場合は、なぜこのコピーを実行する必要がありますか? –

答えて

1

あなたがそうのように保護されたセクション内のクラス間で共有する値を定義します。

class Base 
{ 
public: 
int myPublicShared1; 
int myPublicShared2; 

Base& operator = (Base& other) 
{ 
    // Copy contents in base across 
    return *this; 
} 
protected: 
int myShared1; 
int myShared2; 

private: 
int notShared1; 
int notShared2; 
}; 

class Derived : public Base 
{ 
public: 
Derived& operator = (Derived& other) 
{ 
    Base::operator = (other); 
    // copy the rest of variables specific to Derived class. 
} 
Derived& operator = (Base& other) 
{ 
    Base::operator = (other); 
} 
// Derived now has all variables declared in Base's public and protected section 
}; 
+0

ありがとうございます。これはかなり良いようですが、残念ながら私のBaseクラスには=演算子はありませんが、これをソリューションとしてマークします。これは最も便利なソリューションだと思われます。 – ben

+0

@ben:代入演算子を追加して、追加する必要があることを示しました。あなたは '(* complexObject)= * baseObject'を使うことができます。あるいは、その関数の名前を 'Base :: assign(const Base *)'と 'Derived :: assign(const Base *);に変更することもできます。派生::割り当て(const Derived *) '。次に、それを 'complexObject-> assign(baseObject);' :)のように使うことができます。 –

0

は、C++では、オブジェクトはそのタイプを変更することはできません。

だから、Complexオブジェクトを作成するか、またはあなたが行うことができるようにあなたがコピーctorのを作成して、すぐにあなたのプログラムを書き換え、次のいずれか

新しいコンプレックス(* basicObject)。

サイドノート:拡張のような言葉から、新しいものの使用はあなたがJavaの世界から来たようです。あなたがJavaでのやり方がC++でどうやってやるのかということを間違えてはいけません。

+0

ok、それはコンストラクタのコピーメソッドの私の考えのようなものでしょうか? – ben

+0

@ben:コピーctorは、C++でオブジェクトを扱う際の基本的な要素です。それについて少し読むべきです。 – PlasmaHH

関連する問題