构造函数如何在私有继承中工作

4 c++ inheritance access-specifier

我知道关于这个话题有同样的问题.但我仍然感到困惑.请解释A的类构造函数是如何执行的,obj即使我私下继承了A的类构造函数.

#include <iostream>
using namespace std;
class A{
    public:
        A(){
            cout << "A" << endl;
        }
};
class B:private A{
    public:
        B(){
            cout << "B" << endl;
        }
};
int main(){
    B obj;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产量

A
B
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 6

私有继承意味着所有公共和受保护的基本成员在派生类中变为私有.因此A::A()是一个私人的B,因此完全可以访问B::B().

什么B::B()不能用的都是私有的构造函数A(但你没有任何这些):

struct A
{
public:
    A();
protected:
    A(int);
private:
    A(int, int);
};

struct Derived : /* access irrelevant for the question */ A
{
    Derived() : A() {}      // OK
    Derived() : A(10) {}    // OK
    Derived() : A(1, 2) {}  // Error, inaccessible
};
Run Code Online (Sandbox Code Playgroud)