贴上四个关于动态多态的必备条件:
1 类之间需要满足类型兼容(即派生相关)
2 基类中需要存在virtual函数
3 派生类中需要重写函数
4 对象要用指针或者引用的方式调用虚函数成员(找个历程验证一下)
动态联编和静态联编
点击链接查看详细理解
time 2.26
虚函数(virtual声明的函数,在派生类中重新定义基类中定义的虚函数,在程序执行的时候,编译器动态联编)
当基类和派生类同时存在某一种特性,在基类 函数前面加virtual,这样能保证函数能被派生类重写(保证不会遮蔽基类的接口)
==只有非static成员函数和非 构造函数才能被设计为虚函数,虚函数的声明需要在基类中越上层越好 ==
class A{
public:
virtual void show();
}
class B:public A
{
public:
void show();//默认是基类的函数 不会发生遮蔽,之后所有的派生类默认都会有virtual修饰
}
从上面的程序可知virtual对多态具有决定性的作用,有继承和virtual才能构成多态的初始条件
1、virtual关键字为虚函数的关键字,一般声明在基类接口函数的最前面
2、只需在在基类接口虚函数的声明处添加virtual,派生类中可以省略
3、当基类中定义了虚函数,但是派生类中没有定以新的函数来遮蔽基类中的函数,调用的时候会使用基类的虚函数
4、只有派生类的虚函数覆盖了基类中的虚函数才能构成所谓的动态多态
5、构造函数和析构函数不能为虚函数!
逛一逛 csdn 看看虚函数的相关
这里直接给大佬链接,参考吧:
C++ 虚函数与纯虚函数 浅析
纯虚函数
是什么?
类中的虚函数,只要在类定义中添加“=0”,就叫纯虚函数。
格式
class name{
virtual 返回类型 函数名 (参数列表) =0;
}
为什么?
一般来说,许多时候基类并不能确定函数的实现方法,只能确定函数的功能。但是函数调用的时候必须要用到该函数。这种情况下,C++提供了一种机制,成为纯虚函数,属于虚函数的一种,体现了面向对象的多态性
怎么用?
- 对象名访问
- 指针访问
- 引用访问
- 类内访问
- 构造函数和析构函数中的访问
NOTE