美文网首页
boolan c++的多态与继承

boolan c++的多态与继承

作者: 切哭的小土豆 | 来源:发表于2017-11-05 22:54 被阅读0次

组合与继承都是提高代码可重用性的手段。在设计对象模型时,可以按照语义来识别类之间的组合关系和继承关系。在有些情况下,采用组合关系或者继承关系能完成同样的任务,组合和继承存在着对应关系:组合中的整体类和继承中的子类对应,组合中的局部类和继承中的父类对应,

继承不能支持动态继承

这个其实很好理解,因为继承是编译期就决定下来的,无法在运行时改变,如3例中,如果用户需要根据当地的情况选择计税方式,使用继承就解决不了,而使用组合结合反射就能很好的解决

继承子类不能改变父类接口

四、组合的缺点:

1、整体类不能自动获得和局部类同样的接口

如果父类的方法子类中几乎都要暴露出去,这时可能会觉得使用组合很不方便,使用继承似乎更简单方便。但从另一个角度讲,实际上也许子类中并不需要暴露这些方法,客户端组合应用就可以了。所以上边推荐不要继承那些不是为了继承而设计的类,一般为了继承而设计的类都是抽象类。

2、创建整体类的对象时,需要创建所有局部类的对象

这个可能没什么更好的办法,但在实际应用中并没有多出多少代码

如果没有虚函数【也就是virtual声明的函数】,那么C++的多态性就无法解释了,所以说,虚函数使C++具有了多态性!

一、什么是多态性?

多态性可以概括为“一个接口,多种方法”。

多态与非多态的区别在于“成员函数调用地址的早绑定和晚绑定”。“早绑定”在编译期就可以确定函数的调用地址,是静态的;“晚绑定”在运行时才能确定函数的调用地址,是动态的。

多态的作用是什么呢?在面向对象的编程中,“封装”使得代码模块化;“继承”可以扩展以存在的代码;“多态”使得接口重用。

二、多态性的c++实现:虚函数

声明基类的指针,该指针指向子类的对象。调用相应的虚函数时,可以根据子类的不同而调用不同的函数实现。因此有多态的三个条件:

1)基类指针

2)指向子类对象

3)调用的是虚函数

特殊的,对于强制类型转换,可以将子类对象的指针强制转化为基类对象的指针,

1)当以基类对象的指针调用非虚函数时,仍然调用子类的函数实现

2)当以基类对象的指针调用虚函数时,由于动态绑定,调用的是基类的函数的实现

-

相关文章

  • boolan c++的多态与继承

    组合与继承都是提高代码可重用性的手段。在设计对象模型时,可以按照语义来识别类之间的组合关系和继承关系。在有些情况下...

  • 【Boolan】C++ 多态

    多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。 C++ 多态意味着...

  • 深刻剖析之c++博客文章

    三大特性 封装、继承、多态 多态 C++ 虚函数表解析C++多态的实现原理 介绍了类的多态(虚函数和动态/迟绑定)...

  • 2020-07-06----《C++类的学习》

    函数重载:同名不同参。 C++类的特点:封装、继承、多态。 //多态与函数重载是啥关系? 虚函数:和软件架构相关 ...

  • C++的多态

    C++三大特性:封装、继承和多态。其中最好理解的就是封装了,继承作为C++面向对象的特征也不难理解,那么多态,应该...

  • C++中继承与多态

    父子间的同名冲突 首先来看一段代码: 编译通过,说明子类可以定义和父类相同的同名成员。 子类可以定义父类中的同名成...

  • C++学习笔记(面向对象)

    C++是一门面向对象的语言 类定义 & 对象 C++ 中的继承,多态,抽象

  • 深入研究C++多态(虚函数和虚继承)

    面向对象的三大特性是封装、继承和多态。多态是非常重要的一个特性,C++多态基于虚函数和虚继承实现,本文将完整挖掘C...

  • C++ STL与泛型编程-第一篇 (Boolan)

    C++ STL与泛型编程-第一篇 (Boolan) 本章内容:1 C++ Standard Library vs....

  • C++继承多态

    首先声明,这是我的C++学习笔记 继承 这里我们的Dog继承了Anima,我们创建了一条狗,给狗取了个名字叫啊黄,...

网友评论

      本文标题:boolan c++的多态与继承

      本文链接:https://www.haomeiwen.com/subject/thfkmxtx.html