3

基本クラスとコピー コンストラクターについて混乱しています。

クラスがあるとしましょう

class A {
    public:
    A(int m) : m(m) { return; }
    virtual ~A() { return; }
    int m;
}

そしてこれを継承するクラス

class B : public A {
    public:
    B(int n, int m) : A(m), n(n) { return; }
    vitual ~B() { return; }
    int n;
}

をコピーするときに、 の値class Bも確実にコピーされるようにするにはどうすればよいですか?mclass A

4

4 に答える 4

4

既定のコピー コンストラクターは、メンバー変数が基底クラスにあるか派生クラスにあるかに関係なく、すべてのメンバー変数をコピーします。

クラス B に独自のコピー コンストラクターを作成する場合は、クラス A のメンバーを自分でコピーするか、イニシャライザー リストでクラス A のコピー コンストラクターを使用することをお勧めします。

class B : public A {
    public:
    // ...
    B(const B & b) : A(b), n(b.n) {}
    // ...
};
于 2013-08-02T14:37:02.987 に答える
1

基本コピー コンストラクターは、派生コピー コンストラクターの前に自動的に呼び出されます。通常のコンストラクタと同じです。(より正確には、基本コンストラクターは、派生コンストラクターが続行する前に、派生初期化リストによって呼び出されます)。あなたの場合、デフォルトのコピー コンストラクターで十分です。

ただし、B を A にコピーしないように注意してください (検索オブジェクトのスプライシング)。

于 2013-08-02T14:29:20.193 に答える