2016-12-27 2 views
-1

У меня есть класс C, который наследуется от двух классов A и B. Эти классы имеют частный член с именем i, и насколько я знаю, частные члены не наследуются. когда я распечатываю размер производного объекта, я получаю размер как 12, но я ожидал, что он будет 4, поскольку члены не будут наследоваться. Почему размер указан как 12, а не 4?Размер объекта через множественное наследование

#include<iostream> 
using namespace std; 

class A 
{ 
    private: 
     int i; 
    public: 
     A():i(1){} 
}; 


class B 
{ 
    private: 
     int i; 
    public: 
     B():i(2){} 
}; 


class C : private B,private A 
{ 

    int i; 
    public: 
    C():i(3){} 

    public: 
    void disp() 
    { 
     //cout<<A::i<<endl; 
     cout <<"i = "<< i<<endl; 
    } 

}; 

int main() 
{ 
    C c1; 
    cout <<"sizeof c object = "<< sizeof(c1)<< endl; 
    c1.disp(); 
    return 0; 
} 

output : 
sizeof c object = 12 
i = 3 
+3

Частные члены наследуются. Вы просто не можете получить доступ к их именам. – Quentin

+1

Частные члены также наследуются. но они не могут быть доступны без методов родительского класса. –

+3

Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что он основан на простом заблуждении «частного» наследования. –

ответ

3

Насколько я знаю, частные члены обыкновение быть унаследован.

Но они есть.

Частные члены являются частью производного класса, но не являются доступным им. Это объясняет, почему ваш производный класс имеет размер 12.

Смежные вопросы