1
class B
{
public:
    B(char c = 'a') : m_c(c) {}

public:
    fun();

private:
    char m_c;
};

class C: virtual public B
{ };

class D: virtual public B
{ };

class E
    : public C
    , public D
{ };

「virtual」キーワードが、クラス E がクラス B のコピーを 1 つだけ持つのにどのように役立つのか疑問に思っています。後でその派生クラスに影響を与えるために、「クラス C」で仮想キーワードが行うこと (理解できるように、仮想継承の基本的な動作を理解しようとしているだけです。この質問の答えを見つけようとしましたが、得られませんでした誰かが良いリンクを知っていれば、それが助けになるかもしれません.) 言い換えれば、違いは何ですか

//1)
class C: virtual public B
{ };

//2)
class C: public B
{ };

クラスCをこれ以上運転しないと。オブジェクトの作成中に、1) と 2) の間に特定の違いはありますか。

4

2 に答える 2

1

virtual「共有します」をキーワードに読みました。読まずに「共有しません」

したがって、 with bothCDwith both having virtual public B、両方とも B を共有する準備ができています

最後の例class C: public Bでは、クラス C は共有しません。つまり、独自のコピーを持ちます。

于 2013-06-20T03:04:04.660 に答える