码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-01-10 20:20:11      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:rtu   就是   return   pos   blog   oid   函数调用   derived   程序   

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

#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++程序设计

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

标签:rtu   就是   return   pos   blog   oid   函数调用   derived   程序   

原文地址:https://www.cnblogs.com/goudanli/p/8260301.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!