C++ - 多态与虚函数
2016-01-25 本文已影响176人
Mitchell
虚函数
- 在类的定义中,前面有 virtural 关键字的成员函数被称为虚函数。
class base{
virtual int get();
};
int base::get(){}
- virtual 关键字只用在类定义里的函数声明中,写函数体时候不用。
- 构造函数和静态成员函数不能是虚函数。
多态的变现形式一
- 派生类的指针可以赋给基类指针。
- 通过基类指针调用基类和派生类中的同名虚函数时:
- 若该指针指向一个基类的对象,那么被调用时基类的虚函数;
- 若该指针指向一个派生类的对象,那么被调动的是派生类的虚函数。
这种机制就叫做“多态”。
class CBase{
public:
virtual void SomeVirtualFunction(){}
};
class CDerived:public CBase{
public:
virtual void SomeVirtualFunction(){}
};
int main() {
CDerived ODerived;
CBase * p = & ODerived;
//调用哪个虚函数取决于p 指向哪种类型的对象,编译的时候是不会知道的,直到运行的时候才会知道。
p-> SomeVirtualFunction();
return ();
}
多态的表现形式二
- 派生类的对象可以赋给基类引用
- 通过基类引用调用基类和派生类中的同名虚函数时:
- 若该引用引用的是一个基类的对象,那么被调用时基类的虚函数;
- 若该引用引用的是一个派生类的额对象,那么被调用的是派生类的虚函数。
这种机制也叫做“多态”。
class CBase{
public:
virtual void SomeVirtualFunction(){}
};
class CDerived:public CBase{
public:
virtaul void SomeVirtualFunction(){}
};
int main(){
CDerived ODerived;
CBase & r = ODerived;
//调用哪个虚函数取决于 r 引用哪中类型的对象
r. SomeVirtualFunction();
return 0;
}
多态的作用
在面向对象的程序设计中使用多态,能够增强程序的可扩充性,即程序需要修改或增加功能的时候,需要改动和增加的代码比较少。