大家都知道,this指针指向了对象的起始地址
本节结合多态条件说明一个有关this指针的趣事!
#include <iostream>
using namespace std;
class A {
public:
A (void) {
cout << "A this " << this << endl;
}
virtual void fool(void)
{
cout << "A::fool " << endl;
}
int m_a;
};
class B {
public:
B (void) {
cout << "B this " << this << endl;
}
virtual void print(void)
{
cout << "B::print " << "this = " << this << endl;
}
int m_b;
};
class C :public A, public B {
public:
C (void)
{
cout << "C this " << this << endl;
}
virtual void print(void)
{
cout << "C::print " << "this = " << this << endl;
}
int m_c;
};
int main(void){
C c;
A* pa = &c;
B* pb = &c;
C* pc = &c;
cout << "pa = " << pa
<< " pb =" << pb
<< " pc= " << pc
<< endl;
/*调用成员函数print需要两个必备条件:1、成员函数指针 2、正确的this指针
条件1,成员函数指针通过虚表得到
条件2,pb是基类对象指针,pb->print()得到子类函数指针:编译器通过pb基类对象向下造型出一个子类this指针来匹配子类成员函数*/
pb->print();
pc->print();
return 0;
}
输出:
A this 0x7fff1e437e50
B this 0x7fff1e437e60
C this 0x7fff1e437e50
pa = 0x7fff1e437e50 pb =0x7fff1e437e60 pc= 0x7fff1e437e50
C::print this = 0x7fff1e437e50
C::print this = 0x7fff1e437e50