[英]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.