C++通过虚函数实现运行时多态

版权声明:版权所有 如有侵权 概不追究 https://blog.csdn.net/weixin_40903417/article/details/87909104

虚函数是用来告诉编译器不要马上确定指针所指对象,把它留到运行时再做决定。

凡是带virtual的虚函数都要在类外实现,不能写成内联的。

#include "stdafx.h"
using namespace std;
class Base1
{
public:
	virtual void display();
};
void Base1::display()
{
	cout<<"Base1::display()"<<endl;
}
class Base2:public Base1
{
public:
	virtual void display();
};
void Base2::display()
{
	cout<<"Base2::display()"<<endl;
}
class derived:public Base2
{
public:
	virtual void display();
};
void derived::display()
{
	cout<<"derived::display()"<<endl;
}
void fun(Base1* pt)
{
	pt->display();
}
int main()
{
	Base1 a;
	Base2 b;
	derived c;
	fun(&a);
	fun(&b);
	fun(&c);
	system("Pause");
	return 0;
}

一般虚函数成员

虚函数声明只能出现在类定义中的函数原型声明中,而不能在成员函数实现的时候。

虚函数一般不声明为内联函数,因为对虚函数的调用需要动态绑定,而对内联函数的处理是静态的。

virtual关键字

派生类可以不显式地用virtual声明虚函数,但一般习惯于在派生类的函数中也使用virtual关键字,以增加程序的可读性。

如果打算运行其他人通过基类指针调用对象的析构函数,就需要让基类的析构函数成为虚函数。

每个具有虚表的类,它的对象都含有一个隐含的指针指向它的虚表。

猜你喜欢

转载自blog.csdn.net/weixin_40903417/article/details/87909104