// VC++ 2005 #include <stdio.h> class A { public: A() { printf(">> 在类 A 的 constructor 中, this 的值是 0x%p./n", this); } virtual ~A() { printf("<< 在类 A 的 virtual destructor 中, this 的值是 0x%p./n", this); } private: float ax; float ay; float az; }; // end of class A class B { public: B() { printf(">> 在类 B 的 constructor 中, this 的值是 0x%p./n", this); } virtual void bf(char* tips) { printf(tips); printf("0x%p./n", this); } virtual void ovf(char* tips) { printf(tips); printf("0x%p./n", this); } virtual ~B() { printf("<< 在类 B 的 virtual destructor 中, this 的值是 0x%p./n", this); } private: float bx; float by; float bz; }; // end of class B class C: public A, public B { public: C() { printf(">> 在类 C 的 constructor 中, this 的值是 0x%p./n", this); } virtual void ovf(char *tips) { printf(tips); printf("0x%p./n", this); } virtual ~C() { printf("<< 在类 C 的 virtual destructor 中, this 的值是 0x%p./n", this); } private: float cx; float cy; float cz; }; // end of class C int main() { B* pB = NULL; C* pC = new C; printf("pC 指向 C 实例, 它当然该指向 C 实例的起始处:0x%p/n", pC); pC->bf("pC 指向 C 实例, 调用从 B inherit 的 virtual function bf 时, this 的值是 "); pC->ovf("pC 指向 C 实例, 调用从 B override 的 virtual function ovf 时, this 的值是 "); pB = pC; printf("pC 和 pB 指向同一个 C 实例, pC 的值是 0x%p, 而 pB 的值是 0x%p./n", pC, pB); delete pC; pC = NULL; pB = NULL; printf("/n"); pB = new C; printf("pB 指向 C 实例, 在刚刚完成构造後,它已经向前调整过了吗?: 0x%p/n", pB); pB->bf("pB 指向 C 实例, 调用未被 C override 的 virtual function bf时, this 的值是 "); pB->ovf("pB 指向 C 实例, 调用被 C override 的 virtual function ovf时, this 的值是 "); printf("pB 的值是 0x%p./n", pB); printf("&(*pB) 的值是 0x%p./n", &(*pB)); printf("&(*(C*)pB) 的值是 0x%p./n", &(*(C*)pB)); delete pB; pB = NULL; return 0; } // end of main // 控制台输出 >> 在类 A 的 constructor 中, this 的值是 0x003B5EF0. >> 在类 B 的 constructor 中, this 的值是 0x003B5F00. >> 在类 C 的 constructor 中, this 的值是 0x003B5EF0. pC 指向 C 实例, 它当然该指向 C 实例的起始处:0x003B5EF0 pC 指向 C 实例, 调用从 B inherit 的 virtual function bf 时, this 的值是 0x003B5F00. pC 指向 C 实例, 调用从 B override 的 virtual function ovf 时, this 的值是 0x003B5EF0. pC 和 pB 指向同一个 C 实例, pC 的值是 0x003B5EF0, 而 pB 的值是 0x003B5F00. << 在类 C 的 virtual destructor 中, this 的值是 0x003B5EF0. << 在类 B 的 virtual destructor 中, this 的值是 0x003B5F00. << 在类 A 的 virtual destructor 中, this 的值是 0x003B5EF0. >> 在类 A 的 constructor 中, this 的值是 0x003B5EF0. >> 在类 B 的 constructor 中, this 的值是 0x003B5F00. >> 在类 C 的 constructor 中, this 的值是 0x003B5EF0. pB 指向 C 实例, 在刚刚完成构造後,它已经向前调整过了吗?: 0x003B5F00 pB 指向 C 实例, 调用未被 C override 的 virtual function bf时, this 的值是 0x003B5F00. pB 指向 C 实例, 调用被 C override 的 virtual function ovf时, this 的值是 0x003B5EF0. pB 的值是 0x003B5F00. &(*pB) 的值是 0x003B5F00. &(*(C*)pB) 的值是 0x003B5EF0. << 在类 C 的 virtual destructor 中, this 的值是 0x003B5EF0. << 在类 B 的 virtual destructor 中, this 的值是 0x003B5F00. << 在类 A 的 virtual destructor 中, this 的值是 0x003B5EF0.