gok*_*oon 6 c++ inheritance class
这是一些C++代码:
#include <iostream>
using namespace std;
class m
{
public:
m() { cout << "mother" << endl; }
};
class n : m
{
public:
n() { cout << "daughter" << endl; }
};
int main()
{
m M;
n N;
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
mother
mother
daughter
Run Code Online (Sandbox Code Playgroud)
我的问题是我不想在创建N时调用m的构造函数.我该怎么办?
Sig*_*erm 12
AFAIK,你无法删除继承的构造函数.
您的示例中的问题来自不正确的类设计.构造函数通常用于分配类资源,设置默认值等.它不适合用于输出某些东西.
你应该放
n() { cout << "daughter" << endl; }
Run Code Online (Sandbox Code Playgroud)
进入虚拟功能.
通常 - 如果您需要删除继承的构造函数,那么您可能需要重新考虑/重新设计类层次结构.
class m
{
public:
m(bool init = true) { if (init) cout << "mother" << endl; }
};
class n : m
{
public:
n() : m(false) { cout << "daughter" << endl; }
};
Run Code Online (Sandbox Code Playgroud)
或者如果您不想公开
class m
{
protected:
m(bool init) { if(init) Init(); }
Init() { cout << "mother" << endl; }
public:
m() { Init(); }
};
class n : m
{
public:
n() : m(false) { cout << "daughter" << endl; }
};
Run Code Online (Sandbox Code Playgroud)