说我有一个基类:
class baseClass
{
public:
baseClass() { };
};
派生类:
class derClass : public baseClass
{
public:
derClass() { };
};
当我创建derClass
的实例时,会调用baseClass
的构造函数。我该如何防止这种情况?
答案 0 :(得分:15)
制作额外的空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) { };
};
答案 1 :(得分:4)
基类实例是任何派生类实例的组成部分。如果成功构造派生类实例,则必须 - 按定义 - 构造所有基类和成员对象,否则派生对象的构造将失败。构造基类实例涉及调用其构造函数之一。
这是继承在C ++中如何工作的基础。
答案 2 :(得分:1)
示例工作程序
class Foo:
blah: int
def __init__(self):
self.blah = 'asdf'
输出
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout<<"a\n";
}
A(int a)
{}
};
class B:public A
{
public:
B() : A(10)
{
cout<<"b\n";
}
};
int main()
{
new A;
cout<<"----------\n";
new B;
return 0;
}