2
// Use multiple inheritance. We want 
// both a string and an Object:
class MyString: public string, public Object {
public:
  ~MyString() {
    cout << "deleting string: " << *this << endl;
  }
  MyString(string s) : string(s) {}
};

string(s)上記のコードの意味がわかりません。string実際に呼び出される変数はありませんが、なぜ機能するのでしょうか?

4

4 に答える 4

3

通常、派生クラスを構築するとき、デフォルトの基本コンストラクター (存在する場合) が呼び出されます。特定の派生コンストラクターに対して別の基本コンストラクターを明示的に呼び出したい場合は、初期化リストを使用してこれを行うことができます。

この場合、 を構築するときMyStringに、 aを唯一の引数としてstring取る -constructor (コピー コンストラクター)が引数として呼び出されます。strings

于 2013-03-13T14:50:50.763 に答える
2

はwithstring(s)の親クラス インスタンスを構築しています。MyStrings

MyStringがから継承されていることに注意してくださいstring。これは、 の使用がstring参照するものです。

これは「初期化リスト」として知られています。

于 2013-03-13T14:49:29.917 に答える
1

type の親サブオブジェクトを初期化しますstring。実際には、親に対して呼び出す親コンストラクターを指定しますstring

于 2013-03-13T14:49:39.363 に答える
1

MyStringから派生しstringます。参照する構文 は、唯一の引数としてstring(s)基底クラス コンストラクターを呼び出します。s

于 2013-03-13T14:49:41.543 に答える