在成员函数中调用虚函数(关于多态的注意事项)------新标准c++程序设计

  类的成员函数之间可以互相调用。在成员函数(静态成员函数、构造函数和析构函数除外)中调用其他虚成员函数的语句是多态的。例如:

#include<iostream>
using namespace std;
class CBase
{
	public:
		void func1()
		{
			func2();
		}
		virtual void func2(){cout<<"CBase::func2()"<<endl;}
};
class CDerived:public CBase
{
	public:
		virtual void func2(){cout<<"CDeriver::func2()"<<endl;}
};
int main()
{
	CDerived d;
	d.func1();
	return 0;
}

  输出:

CDeriver::func2()

  第20行调用func1成员函数。进入func1成员函数,执行到第8行,调用func2函数。看起来调用的应该是CBase类的func2成员函数,但输出结果证明实际上调用的是CDerived类的func2成员函数。这是因为,在func1函数中,“func2();”等价于“this->func2();”,而this指针显然是CBase*类型的,即是一个基类指针,那么“this->func2();”就是在通过基类指针调用虚函数,因此这条函数调用语句就是多态的。当本程序执行到第8行时,this指针指向的是一个CDerivrd类的对象,即d,因此被调用的是CDerived类的func2成员函数。

 

新标准c++程序设计

posted @ 2018-01-10 19:00  ff_d  阅读(739)  评论(0编辑  收藏  举报