Code:
#include <cstdio>
class myc {
int dummy;
public:
int si(){return sizeof(*this);}
};
class d_myc : public myc {
int d_dummy;
};
int main() {
myc a;
d_myc b;
printf("%d %d\n%d %d", a.si(), b.si(), sizeof(a), sizeof(b));
return 0;
}
output :
4 4
4 8
I expected :
4 8
4 8
Why were my expectations wrong?
This is resolved at compile time:
class myc {
int dummy;
public:
int si(){return sizeof(*this);}
};
i.e. *this
is always myc and will never be d_myc
.
To get what you want you will have to override the function in d_myc
to do the same in the derived as the base. This is because sizeof(d_myc)
includes the base class too.
sizeof
is resolved at compile-time, not run-time. So sizeof(*this)
is equivalent to sizeof(myc)
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With