#include<iostream>
using namespace std;
class Person {
public:
Person(int x) { cout << "Person::Person(int) called" << endl; }
//Person() { cout << "Person::Person() called" << endl; }
};
class Faculty : virtual public Person {
public:
Faculty(int x):Person(x) {
cout<<"Faculty::Faculty(int) called"<< endl;
}
};
class Student : virtual public Person {
public:
Student(int x):Person(x) {
cout<<"Student::Student(int) called"<< endl;
}
};
class TA : public Faculty, public Student {
public:
TA(int x):Student(x), Faculty(x),Person(x) {
cout<<"TA::TA(int) called"<< endl;
}
};
int main() {
cout<<"size Person "<<sizeof(Person)<<"\n";
cout<<"size Faculty "<<sizeof(Faculty)<<"\n";
cout<<"size Student "<<sizeof(Student)<<"\n";
cout<<"size TA "<<sizeof(TA)<<"\n";
}
Выход:C++ что происходит внутри, если класс наследуется фактически?
размера Person 1 размера факультет 8 размера Student 8 размера TA 16
, что внутри происходит в компиляторе? Я думаю, что компилятор определенно добавляет VPTR, если он добавляет VPTR, тогда он присваивает NULL?
для виртуального деструктора также компилятор добавляет VPTR, как компилятор разрешает все внутренне?
См. Http://stackoverflow.com/a/991723/887836 – Alex
Какой компилятор вы спрашиваете? Есть несколько. – user2079303
MinGW или GCC. Мне просто нужна общая идея – ganesh