Jeśli chciałbyś aby była możliwość dowiadywania się o rozmiar obiektu klasy nadrzędnej to musiałbyś sam sobie to zaimplementować np tak:
#include <cstdlib>
#include <cstdio>
class CParam1;
class Ceep
{
public:
int sizeSuper;
int getRozmiar()
{
return sizeSuper;
}
};
class CParam1: public Ceep
{
public:
int a;
int b;
int c;
int d;
CParam1() {
Ceep::sizeSuper = sizeof(*this);
}
//int getRozmiar()
//{
// return sizeof(*this);
//}
};
int main() {
CParam1 test;
printf("rozmiar %d \n",sizeof(test));
printf("rozmiar %d \n", test.getRozmiar());
char z;
scanf("%i", &z);
return 0;
}
To co ty zrobiłeś to chciałeś się dowiedzieć o rozmiar klasy "Cepp" który wynosi 1 bo nie zdefiniowałeś żadnego pola. Jak będziemy chcieli sprawdzać rozmiar klasy bez Pól to rozmiar będzie wynosić 1 bajt(w visualu przynajmniej tak jest). Nie ma możliwości dowiedzieć się o rozmiar klasy która ją dziedziczy ponieważ to są 2 osobne klasy i this wskazuje na obiekty 2 różnych klas. Mimo że zrobiliśmy dziedziczenie np z klasy "A" do "B" to w klasie "B" tkwi w pewnym sensie obiekt klasy "A" i this tego obiektu wskazuje jedynie na ten obiekt i nic więcej. Gdy wywołamy funkcję getRozmiar którą odziedziczyliśmy to tak na prawdę nie wywołaliśmy funkcji która należy do klasy pochodnej tylko wywołaliśmy funkcję która należy do klasy bazowej. najłatwiej wyobrazić sobie to tak:
z klasy pochodnej nie możemy się odnieść do prywatnych składowych klasy podstawej. Dzięki czemu jest zachowana enkapsulacja. Bo inaczej przez dziedzicznie moglibyśmy oszukiwać. Czyli w obiekcie klasy pochodnej tkwi w pewnym sensie obiekt klasy bazowej.