C++ C++;14初始化类构造函数初始化列表中的继承成员
我有一个基础班C++ C++;14初始化类构造函数初始化列表中的继承成员,c++,c++11,c++14,C++,C++11,C++14,我有一个基础班 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; } 这是“解决方案”,还是我可以做我最初尝试做的事情 当然
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)
{
}
并更改A类
A(int a_val)
: a{a_val}
{
}
然而,就我所做的而言,这并不是真正的“更好”
在回答下面的一个问题时(斯旺):我能这样做吗
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已默认初始化。执行此操作时:
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已经默认初始化。@LogicStuff我看不出这是如何重复的myself@Mikhail链接问题非常相似,但不同的问题是我believe@LogicStuff我看不出这怎么是重复的myself@Mikhail这个问题很相似,,但是不同的问题我相信谢谢,在我上面的问题中看到我的问题(我已经附加了)不,你不能,因为a已经被a()初始化了,你正在尝试再次初始化它,通过执行a=a_val,你使用的是赋值运算符,而不是复制构造函数。谢谢,在我上面的问题中看到我的问题(我已经附加了)不,你不能,因为a已经被a()初始化,然后你尝试再次初始化它,通过执行a=a_val,你使用的是赋值运算符,而不是复制构造函数。