Пустой производный класс, унаследованный от непустого базового класса
class Base
{
int i ;
};
class Derived : public Base { } ;
int main()
{
cout << sizeof(Derived);
}
Output :
4
В базовом классе, поскольку я является частным, он не должен наследоваться от производного класса. Следовательно, Базовый класс должен действовать как пустой класс. И размер пустого класса равен 1, тогда почему он отображается как 4?
3 ответа
Derived
класс по-прежнему содержит i
в Base
, это просто не доступно, поэтому размер 4 из-за i
Размер по-прежнему 4, потому что размер Base
4. Допустим, например, что Base
имеет функцию public:
int getI() {return i;}
тогда вы можете позвонить Derived::getI()
, следовательно, Derived должен включать членов частной базы.
Здесь, производный класс определен публично.. означает здесь в определении ": публичная база"
таким образом, производный класс может получить доступ как ко всем открытым, так и к закрытым членам базового класса. Он сделает все закрытые члены общедоступными в этом производном классе. Таким образом, выходные данные равны 4 унциям i.not 1. Если вы пишете private, то это даст вывод 1..