无法从派生类中调用基类的构造
问题描述:
说我有一个基类:无法从派生类中调用基类的构造
class baseClass
{
public:
baseClass() { };
};
而派生类:
class derClass : public baseClass
{
public:
derClass() { };
};
当我创建的derClass
实例的baseClass
调用构造函数。我怎样才能防止这一点?
答
基类实例是任何派生类实例的组成部分。如果成功构建派生类实例,则必须 - 按定义 - 构造所有基类和成员对象,否则派生对象的构造将失败。构造基类实例涉及调用其构造函数之一。
这是如何在C++中继承的基础。
答
制作额外的空ctor。
struct noprapere_tag {};
class baseClass
{
public:
baseClass() : x (5), y(6) { };
baseClass(noprapere_tag) { }; // nothing to do
protected:
int x;
int y;
};
class derClass : public baseClass
{
public:
derClass() : baseClass (noprapere_tag) { };
};
你没有;这没有意义。你为什么认为你需要这样做? – GManNickG 2010-10-31 21:05:46
@GMan我有一个基类,在构造函数中使用头部准备数据。派生类不需要准备好头文件,但它调用正在准备头文件的基类构造函数,并将其中的某些内容混淆。 – Brad 2010-10-31 21:10:15
你错过了继承的点。继承形成“一个是B”的关系。如果B做了A不应该做的事情,那么A不是B. – 2010-10-31 21:17:00