赞
踩
类的多态就是指多种形态,在接触多态前,我们先来认识一下虚函数。
virtual
关键字的成员函数就是虚函数。virtual
只写在类定义的函数声明中,写函数体时不用。class base{
public:
virtual int get();
...
...
};
int base::get(){
//函数体
};
虚函数与普通成员函数的区别就在于虚函数可以参与多态,而普通的成员函数不能。
派生类的指针可以赋值给基类指针。
如果,通过基类指针调用基类和派生类的同名虚函数,那么会出现以下两种情况:
这中机制就是多态。
示例:
#include <iostream> using namespace std; class CBase{ public: virtual void SomeVirtualFunction(){ cout<<"CBase"<<endl; } }; class CDerived:public CBase{ public: virtual void SomeVirtualFunction(){ cout<<"CDerived"<<endl; } }; int main(){ CDerived ODerived; CBase *p=&ODerived; p->SomeVirtualFunction(); //调用哪个虚函数取决于p指向哪种类型的对象 return 0; }
debug后输出结果为:
CDerived
从上述程序中我们可以发现,在语句CBase *p=&ODerived;
执行时,指针p
指向派生类CDerived
的对象ODerived
,因此,调用的是ODerived
中的虚函数SomeVirtualFunction
。
派生类的对象可以赋值给基类的引用。
如果,通过基类引用调用基类和派生类的同名虚函数,那么会出现以下两种情况:
这中机制也称为多态。
示例:
#include <iostream> using namespace std; class CBase{ public: virtual void SomeVirtualFunction(){ cout<<"CBase"<<endl; } }; class CDerived:public CBase{ public: virtual void SomeVirtualFunction(){ cout<<"CDerived"<<endl; } }; int main(){ CDerived ODerived; CBase & r =ODerived; r.SomeVirtualFunction(); return 0; }
debug后程序运行结果为:
CDerived
我们通过解析上面的程序很容易发现,基类CBase
引用了派生类CDerived
的对象ODerived
,因此调用的是ODerived
中的虚函数SomeVirtualFunction
。
多态是面向对象语言的一个重要的性质,可以增强程序的可扩充性,即程序修改或增加功能时,减少代码修改量。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。