c++ - protected 构造函数使基类不可实例化

标签 c++ inheritance constructor virtual-functions

如果我想避免它的实例,那么让基类构造函数 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/

相关文章:

c++ - 我可以在 BlackBerry 10 中使用 Xcode 编译的 armv7/armv7s .so 库吗?

c++ - Qt Creator 如何用作通用 C++ IDE(不使用 Qt 库)?

c++ - 我的 vector 结构没有按预期进行迭代

c# - 在构造函数中声明的 C# 对象的垃圾收集

c++ - 为用户定义的类正确调用复制构造函数/赋值运算符

java - 多层次的子类和方法链接

C++11 构造函数继承不起作用

c# - 检查 List 的属性是否属于给定类型

c++ - 带有初始化列表的空构造函数是否被认为是微不足道的?

c++ - 为什么 QAction 没有默认构造函数?