C++多态性主要体现在虚函数的调用,在C++中,虚函数的调用使用的是动态绑定,也有人说是晚捆绑,也就是在程序运行时才决定调用的函数,即使程序员不知道对象类型,程序仍然可以作出适合该对象类型的行为。
简单的说,虚函数就是在函数原型前加上virtual关键字。函数一旦被声明为虚函数,即使类在改写它的时候没有将其声明为虚函数,它从该点的继承层次结构中仍然是虚函数。如果基类中一个函数被声明为虚函数,在若干子类中有着不同的实现,那么我们在创建若干子类的不同对象时,可以用基类的指针或者引用来指明子类对象并且调用相应子类的函数。
虚函数的定义方式如下:
◆类的静态成员函数不可以定义为虚函数;
◆类的构造函数不可以定义为虚函数;
◆非类的函数不可以定义为虚函数。
纯虚函数是在声明虚函数时初始化为0的函数。
- #include<memory>
- #include<iostream>
- using namespace std;
- Virtual void print() const = 0;
抽象类
简单的说,带有一个或多个未实现的纯虚函数的类是抽象类。如果一个类继承自一个抽象类,但它没有全部实现父类里面所有的纯虚函数,那么那些纯虚函数在子类中仍然是纯虚的,这个子类仍然是抽象类,仍然不能实例化对象。
抽象类是一种特殊的类,只能作为基类来使用,其纯函数的实现由派生类给出。虽然不能实例化抽象类,但我们可以声明一个抽象类的指针和引用,在实例化对象时,可以用不同的子类来实现,从而实现多态性操作。只有当派生类将基类中的所有的纯虚函数都实现的时候,它才不再是抽象类。
C++多态性
从广义上说,C++多态性是指一段程序能够处理多种类型对象的能力。在C++语言中,多态性可以通过强制多态、重载多态、类型参数化多态、包含多态等多种实现形式。所谓多态就是通过类的继承,使得同一个函数可以根据调用他的对象的类型作出不同的响应。它也继承和重载共同构成面向对象的3大编程特性。
C++多态性通过虚函数来实现,当我们用基类的指针来调用虚函数时,程序会根据对象的属性选择其自身的函数实现。即使程序员不知道对象类型,程序仍然可以作出适合该对象类型的行为。
C++语言支持两种类型的多态:一种是编译时的多态(静态多态),另一种是运行时的多态(动态多态)。在编译时的多态是通过静态联编实现的,而在运行时的多态则是通过动态联编实现的。
【编辑推荐】