Как конструктор работает в частном наследовании
Я знаю, что есть один и тот же вопрос по этой теме. Но я все еще в замешательстве. Пожалуйста, объясните, как конструктор класса A выполняется с obj
даже я наследую конструктор класса А в частном порядке.
#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;
}
Выход
A
B
1 ответ
Решение
Частное наследование означает, что все публичные и защищенные базовые члены становятся частными в производном классе. Так 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
};