1. 概念
在c++中,每个对象都能通过this指针来访问自己的地址。this指针是所有类的成员函数隐含的参数,可以指向调用的对象。
2.代码示例
class CDocument
{
public:
virtual void Serialize() {}
void OnFileOpen()
{
Serialize();
}
};
class CMyDoc : public CDocument
{
public:
virtual void Serialize()
{
cout << "CMyDoc" << endl;
}
};
int main()
{
CDocument* myDoc = new CMyDoc();
myDoc->OnFileOpen();
system("pause");
return 0;
}
当我们调用myDoc->OnFileOpen()时,与实际调用CDocument::OnFileOpen(&myDoc)的方式是一样的,&myDoc对应上面所说的隐藏的参数,即this指针。
在调用OnFileOpen()中Serialize()函数时,实际的调用方式为this->Serialize(),即(*(this->vptr)[n])(this),通过虚函数指针(vptr)找到函数在虚函数表中的位置(vtbl).
查看myDoc的虚函数表如下图所示: