我对某些类的初始化有问题。简化代码如下:
class Base
{
Base(int)
};
class BaseChild : public Base
{
};
class mainWindow
{
boost::shared_ptr<Base> pBase;
void init();
};
void mainWindow::init()
{
this->pBase = boost::shared_ptr<Base>(new Base(12));
this->pBase = boost::shared_ptr<Base>(new BaseChild(12));
}
所以问题在于BaseChild类的初始化,它是来自Base类的子类。我究竟做错了什么?我认为父类的指针可以指向子类。
通常我的程序必须以这种方式工作:
启动时,会有父类的初始化(在上例中为this->pBase = boost::shared_ptr<Base>(new Base(12));
)。这已经有效了。
在某些情况下,当某个标志更改其值时,指向父类对象的指针应更改为指向子类对象。
答案 0 :(得分:0)
您错过了在int
中占用BaseChild
的构造函数。 Base
中的构造函数也是私有的,这使得它在Base
类之外无法使用
尝试
class Base
{
public:
Base(int);
};
class BaseChild : public Base
{
public:
BaseChild(int);
};