C++多态
C++中的多态性是面向对象编程的一个核心概念,它允许您使用相同的界面来操作不同的基本数据类型或类。多态性可以分为两种类型:编译时多态和运行时多态。
编译时多态(静态多态)
编译时多态主要是通过函数重载(Function Overloading)和运算符重载(Operator Overloading)实现的。这两种方式允许您在相同的作用域内定义名称相同但参数列表不同的多个函数,或者重新定义操作运算符对类实例的作用方式。
函数重载:可以在相同的类中定义多个相同名称的函数,只要它们的参数列表(参数的类型或数量)不同即可。
运算符重载:可以让预定义的C++运算符在用户自定义的数据类型上以特殊的方式进行操作。
编译器在编译期间根据函数的参数列表决定调用哪个函数或操作,因此称为编译时多态。
运行时多态(动态多态)——主要
运行时多态主要是通过虚函数(Virtual Functions)和继承(Inheritance)实现的。它允许您通过基类的指针或引用来调用派生类中重写的函数。
#include <iostream>
using namespace std;
/*
多态满足关系:
有继承,子类重写父类的虚函数(函数返回值类型 函数名 参数列表 完全相同)
多态怎么使用:
父类的指针或者引用,指向子类的对象。
*/
class Animal{
public:
virtual void makeSound(){
cout << "动物在叫!" << endl;
}
};
class Dog : public Animal{
public:
void makeSound() override{
cout <<"狗在叫!"<<endl;
};
};
class Cat : public Animal{
public:
void makeSound() override{
cout <<"猫在叫!"<<endl;
};
};
void sound(Animal &animal) //Animal &animal = dog
{
animal.makeSound();
}
int main()
{
Dog dog;
sound(dog); //引用
Animal *animal = new Cat;
animal->makeSound(); //指针
cout << "Hello World!" << endl;
return 0;
}