#include "stdafx.h" class A { public: int i; A() { i=1; } }; class B: public A { public: int i; B() { i=2; } }; class C: public B { public: int i; C() { i=3; } }; int main(int argc, char* argv[]) { A a1; printf(" %d ", a1.i); B a2; printf(" %d ", a2.i); C a3; printf(" %d ", a3.i); printf(" %d ", ((B)a2).i); printf(" %d ", ((B)a3).i); printf(" %d ", ((C)a3).i); printf(" %d ", sizeof(a1)); printf(" %d ", sizeof(a2)); printf(" %d ", sizeof(a3)); return 0; }
打印结果:
1
2
3
2
2
3
4
8
12
但是仍可以这样调用:
//: HIDE.CPP -- Name hiding during inheritance class homer { public: int i; homer() {i=100; } int doh(int) const { return 1; } char doh(char) const { return 'd';} float doh(float) const { return 1.0; } }; class bart : public homer { public: int i; bart() {i=200; } class milhouse {}; void doh(milhouse) const {} }; main() { bart b; b.homer::doh(1); // 调用隐藏函数 printf("%d %d ", b.homer::i, b.i); // 调用隐藏属性 //! b.doh('x'); // Error //! b.doh(1.0); // Error }
正确输出:100 200