2015-07-11 2 views
4

Я знаю, что есть один и тот же вопрос по этой теме. Но я все еще смущен. Пожалуйста, объясните, как выполняется конструктор класса 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; 
} 

Выход

A 
B 

ответ

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 
}; 
+0

вы можете объяснить, как работает мой приведенный пример? Я имею в виду, можете ли вы показать мне код обработки фона в моем примере? –

+0

@LetDoit: Я не совсем понимаю ваш вопрос. Ваше определение 'B :: B()' подразумевает конструкцию по умолчанию для подобъекта 'A'; это похоже на вас, если вы написали «B :: B(): A() {/ * ваш код * /}'. –

+0

в моем примере 'B()' неявно вызывает конструктор по умолчанию класса A? Такие как. 'B(): A() {}' –