多态
多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。
- 静态多态:函数重载(运算符重载),模板属于静态多态,在编译期间就能确定的多态。
- 动态多态:父类的指针或引用指向子类对象,通过指针或引用调用子类重写的虚函数,在运行期间才能确定具体调用哪个函数,是动态多态。
- 启动动态多态的条件:有继承关系,子类重写父类虚函数并且父类指针调用子类重写的虚函数。
#include<iostream>
using namespace std;
class A
{
public:
int a;
int b;
int c;
const int d = 1;
virtual void work()
{
cout << "A work()" << endl;
}
void fun()
{
cout << "A fun()" << endl;
}
};
class B :public A
{
public:
virtual void work()
{
cout << "B 重写了父类 A 的work函数" << endl;
}
void fun()
{
cout << "B fun()" << endl;
}
};
class C :public B
{
public:
void work()
{
cout << "C 重写了父类 B 的work函数" << endl;
}
void fun()
{
cout << "C fun()" << endl;
}
};
int main()
{
//多态,父类指针指向子类对象
A* a = new C();
a->fun(); //函数隐藏,只需要函数名字(fun)相同即可,会去调用指针类型的函数
a->work(); //父类指针指向子类对象,去调用虚函数的时候会调用被重写的虚函数
return 0;
}