我想通过它的构造函数初始化基类的一些成员,但是我失败了。在下面的代码中,似乎派生类成员message
在调用基构造函数之前未被初始化。 解决方法是有Child(string messg_arg) : message(messg_arg), Parent(messg_arg)
,但有什么办法可以避免这种情况?派生类中初始化的顺序
class Parent
{
protected:
string something;
Parent(string something_arg) : something(something_arg)
{}
}
class Child : public Parent
{
public:
string message;
Child(string messg_arg) : message(messg_arg), Parent(message)
{}
}
初始化顺序由成员出现的顺序决定,基类出现在成员之前。随着这一点,你究竟在努力完成什么? “Child”类中的“message”会隐藏“Parent”类中的消息。 – MicroVirus
我试图在派生类中构造一个对象,并通过引用将其传递给基类。无论如何,我会重新考虑这个设计。 – user4168715
而不是传递东西到基地,让基地定义一个函数,从它的继承者获取的东西,并强制继承人通过使函数纯虚拟实现它。 '虚拟东西&getStuff()= 0;'在这里有几个潜在的性能考虑,但大多数时候这是一个简单而安全的方式来获得你想要的。 – user4581301