本文介绍: 本篇文章作为C++:多态的知识总结。多态的概念:在完成某个行为时,不同的对象会产生不同的状态。例如:在手机上买火车票这一行为,如果是学生买票,是打折买票,如果是普通人买票,是全价买票。重载:两个函数在同一作用域,函数名相同,参数不同(参数个数,参数类型,参数顺序)。重定义:对于分别在父类与子类作用域的同名成员函数,如果不构成重写就是重定义重写:对于分别在父类与子类作用域的同名成员函数,如果它们的参数,返回值相同(协变,析构函数列外),且它们被virtual修饰,那么它们就构成重写。
前言
一、多态的概念,定义,实现
1. 多态的概念
多态的概念:在完成某个行为时,不同的对象会产生不同的状态。
例如:在手机上买火车票这一行为,如果是学生买票,是打折买票,如果是普通人买票,是全价买票。
2. 多态构成条件
虚函数的重写:派生类中有函数的函数头与基类完全相同的虚函数(派生类虚函数与基类虚函数的返回值类型,函数名,参数列表完全相同)称派生类的虚函数重写了基类的虚函数。
上图中B类中func函数完成了对A类中虚函数func的重写。
要注意的是,如果要对继承体系中某一成员函数构成多态,父类的该成员函数必须被virtual修饰,子类的该成员函数可以不被virtual修饰,但子类中该函数已经被virtual修饰了,因为该函数继承父类中对应函数的接口。建议将父子类中的该函数都被virtual修饰
虚函数重写还有两个列外:
从上面可以看出,C++对于函数重写的要求比较严格,如果我们只是因为虚函数的函数名拼写错误导致多态无法实现,但这种错误在编译期间不会报错,只有在运行期间没有得到预期结果后调试才能发现,这样是非常让人难受的。幸好C++11提供了override和final两个关键字,可以帮助我们检查是否完成重写。
3. 重写,重定义,重载的对比
二、抽象类
三、多态的原理
四、单继承和多继承关系中的虚函数表
1. 单继承
2. 多继承
五、多态部分常见问题
总结
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。