如果我想避免它的实例,那么让基类构造函数 protected 是一种好习惯吗?我知道我也可以有一个纯虚拟虚拟方法,但这看起来很奇怪......
请考虑以下代码:
#include <iostream>
using std::cout;
using std::endl;
class A
{
protected:
A(){};
public:
virtual void foo(){cout << "A\n";};
};
class B : public A
{
public:
void foo(){cout << "B\n";}
};
int main()
{
B b;
b.foo();
A *pa = new B;
pa->foo();
// this does (and should) not compile:
//A a;
//a.foo();
return 0;
}
是否有我没有看到的缺点或副作用?
最佳答案
保护基类构造函数是常见的做法。当您的基类中有一个纯虚函数时,这不是必需的,因为您将无法实例化它。
但是,在基类中定义非纯虚函数不被认为是好的做法,但在很大程度上取决于您的用例并且没有坏处。
没有任何缺点或副作用。使用 protected 构造函数,您只需告诉其他开发人员您的类仅用作基础。
关于c++ - protected 构造函数使基类不可实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19090328/