// sizeofvirtual.cpp - shows size effect of virtual class // cmc, 11/21/2011 #include using namespace std; class NoVirt { public: int x; int getX() const {return x;} NoVirt(int x=0) : x(x) { } }; class NoVirtSquared : public NoVirt { public: int getX() const {return x*x;} NoVirtSquared(int x=0) : NoVirt(x) { } }; class Virt { public: int x; virtual int getX() const {return x;} Virt(int x=0) : x(x) { } }; class VirtSquared : public Virt { public: virtual int getX() const {return x*x;} VirtSquared(int x=0) : Virt(x) { } }; void pr(const char *s, NoVirt &o) { cout << "size of " << s << ": " << sizeof o << ";"; cout << " value: " << o.getX() << endl; // T must have getX() } void pr(const char *s, Virt &o) { cout << "size of " << s << ": " << sizeof o << ";"; cout << " value: " << o.getX() << endl; // T must have getX() } int main(){ NoVirt nv(5); NoVirtSquared nvs(5); Virt v(6); VirtSquared vs(6); pr("nv",nv); pr("nvs",nvs); pr("v",v); pr("vs",vs); }