码迷,mamicode.com
首页 > 编程语言 > 详细

C++继承和多态

时间:2020-07-18 22:17:59      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:tail   函数   细节   操作   实现   简单   赋值   类重写   隐式类型转换   

面向对象的三大特征
封装:
对于封装来说就是数据与具体操作实现的代码都放在某个对象的内部,使这些代码的具体细节不被外界发现,只留下一些接口供外部来使用,而不能一任何的形式来对象内部的实现。使用封装能够隐藏具体的实现的细节,使代码更加易于维护并且保证了系统的安全性。
继承:
继承机制是面向对象程序设计使代码进行复用的最重要的手段,他允许程序员在保证类原有类特性的基础上进行扩展来增加功能。这样新产生的类就被称为派生类,继承就可以表现面向对象机制的的层次结构。
多态:
多态简单点说就是“一个接口,多种实现”,就是同一种事物表现出的多种形态。多态在面向对象语言中是指:接口多种的不同实现方式。也就是复用相同接口,实现不同操作。

C++多态支持两种多态性,编译时多态和运行时多态。编译时多态是通过重载函数来实现的,运行时多态是通过虚函数来实现的。静态多态:编译器在编译期间完成,编译器根据函数实参的类型(可能会隐式类型转换),可推断出要调用哪个函数,如果有对应的函数就调用相应的函数,否则就报一个编译错误。动态多态:在函数执行期间(非编译期)判断所引用对象的实际类型,根据实际类型的调用相应的方法。使用virtual关键字修饰类的成员函数,指明该函数为虚函数,派生类需要重新实现,编译器将实现动态绑定。

动态多态实现的条件:
1>、使用场景:父类的指针或者引用指向父类或者子类的对象(由赋值兼容规则决定);
2>、实现多态的两个条件:虚函数的重写;父类的指针或者引用调用重写的虚函数。
3>、若父类中的成员函数加上virtual关键字,则子类中重写的该函数默认virtual,可以不指定,但是一般加上;
重写:子类重写父类的虚函数,要求函数名称,函数参数,返回值完全一样(协变除外);

总的来说:封装可以隐藏实现细节包括包含私有成员,使得代码模块增加安全指数;继承可以扩展已存在的模块,为了增加代码的复用性;多态则是为了保证类在继承和派生的时候,类的实例被正确调用,实现了接口的重用

C模拟实现多态
C++中的多态

我们知道的是在C++中会维护一张虚函数表,根据赋值兼容规则,我们知道父类的指针或者引用是可以指向子类对象的。如果一个父类的指针或者引用调用父类的虚函数则该父类的指针会在自己的虚函数表中查找自己的函数地址,如果该父类对象的指针或者引用指向的是子类的对象,而且该子类已经重写了父类的虚函数,则该指针会调用子类的已经重写的虚函数。
————————————————
版权声明:本文为CSDN博主「成长的菜鸟1018号」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wenqiang1208/java/article/details/76244628

C++继承和多态

标签:tail   函数   细节   操作   实现   简单   赋值   类重写   隐式类型转换   

原文地址:https://www.cnblogs.com/mosewumo/p/13337424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!