类有三大特性,封装,继承和多态。所谓多态可以理解为一种方法多种实现。
在C++中,我们可以通过虚函数的方式在子类中对父类函数进行重写。在C++中方法也叫做函数。
所以一种方法多种实现在通过代码实现的过程中也可以理解为通过对函数的重写来做到对不同的对象同一个函数调用的时候实现不同的功能。具体如下:
#include <iostream>
class Animal{
public:
virtual void show(){
std::cout << "Animal" << std::endl;
}
};
class Tiger :public Animal{
public:
void show() override{
std::cout << "Tiger" << std::endl;
}
};
int main(){
std::cout << "sizeof(Animal): " << sizeof(Animal) << std::endl;
std::cout << "sizeof(Tiger): " << sizeof(Tiger) << std::endl;
Animal* animal = new Animal;
Tiger* tiger = new Tiger;
animal->show();
tiger->show();
delete tiger;
delete animal;
system("pause");
return 0;
}
结果如图:
如结果所示,Animal类和Tiger类的大小是相同的。着说明两个类中都仅仅存在一个函数,子类Tiger并没有在原来的基础上再加上新的函数。
而调用结果的不同就是子类对父类的函数重写的效果,这种调用同函数实现不同的效果的情况类似于多态。(子类中的override表明子类中的此函数是对父类函数的重写,作为标识,可以不写)
想要实现多态需要一些必要条件:
继承关系
虚函数的重写
有父类指针或者引用指向或引用子类对象
通过多态可以实用类对外提供各种操作。可以在使用别人提供的类时重写其中的部分函数改变其功能。例如,在基于C++实现的可以做软件的qt中,可以通过重写qt中的函数来实现鼠标点击屏幕的功能等等。