c++ - 基类构造函数 protected 时在派生类成员函数中创建基类实例

标签 c++ constructor protected radix derived

给定以下代码:

class A
{
protected:
    A(){};  // compilation error
public:
    void foo(){cout << "A\n";}; 
};

class B : public A
{
public:
    B() { };
    void foo(){
        cout << "B\n";
        A A(); // OK
        A a1; // compilation error
    }
};

如果我将基类 A 构造函数更改为 public,代码将编译。怎么解释呢?

最佳答案

为了创建一个对象,这样做所需的构造函数必须是可访问的。在 B 的成员中,您可以访问 A 的 protected 成员,但只能通过 B 类型的对象.所以你不能在那里访问 protected 默认构造函数。

上一行 A a(); 编译因为它声明了一个函数。

关于c++ - 基类构造函数 protected 时在派生类成员函数中创建基类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29951564/

相关文章:

vb.net - 有没有办法使值只能由嵌套类 VB.NET 的父级访问?

javascript - 这是常规的构造函数吗?

c++ - 空的 .ctor 和 .dtor 会降低性能吗?

c++ - 为什么我不能使用 protected /私有(private)继承访问派生实例中基类的 protected 成员?

java - 为什么我的分数变量在我的 GameScreen 类之外不可评估?

java - 我应该将抛出异常放在链式重载构造函数中的哪里?

c++ - 内存调试策略

c++ - 使用 MXE gcc 构建 Qt 应用程序时缺少 std::mutex

c++ - 如何在 KDevelop 中将 C++ 项目构建到与源文件相同的文件夹中

JNI C++ 环境中的 Java 线程仅使用一个内核。 Arm 处理器和 Ubuntu