簡體   English   中英

C ++ 14在類構造函數初始化列表中初始化繼承的成員

[英]C++14 Initializing inherited member in class constructor initialization list

我有一個基礎課

class A
{
    protected:

    int a;
};

還有一個派生的類:

class B : public A
{

    B(int a_val)
        : a{a_val} // not allowed by compiler?
    {
    }
};

我可以通過以下方法解決問題:

    B(int a_val)
    {
        a = a_val;
    }

這是“解決方案”,還是可以做我最初嘗試做的事情?

當然,我可以這樣做:

    B(int a_val)
        : A(a_val)
    {
    }

並改變class A

    A(int a_val)
        : a{a_val}
    {
    }

但是,就我正在做的事情而言,這並不是真正的“更好”。

回答以下答復(由swang提出):我可以這樣做嗎?

B(int a_val)
    : A(), a{a_val}
{
}

執行此操作時:

class B : public A
{

    B(int a_val)
        : a{a_val} // not allowed by compiler?
    {
    }
};

您正在嘗試初始化不屬於B類的變量,因此正確的解決方案是

B(int a_val)
   : A(a_val)
{
};

你可以這樣做

B(int a_val)
{
    a = a_val;
};

因為在a = a_val之前,已調用A的默認構造,並且A :: a已默認初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM