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 ex开发者_运维百科pectations wrong?
sizeof
is resolved at compile-time, not run-time. So sizeof(*this)
is equivalent to sizeof(myc)
.
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.
精彩评论