首页 / 知识
关于c ++:继承和多态-易用性与纯度
2023-04-12 06:12:00

Inheritance and Polymorphism - Ease of use vs Purity在一个项目中,我们的团队使用对象列表对应该以相似方式处理的所有数据集执行批量操作。尤其是,不同的对象在理想情况下将发挥相同的作用,而使用多态性很容易实现。我有一个问题,就是继承暗示了是关系,而不是有关系。例如,多个对象都有一个损坏计数器,但是为了使它易于在对象列表中使用,可以使用多态性-除非那意味着a是不正确的关系。 (人不是损坏计数器。) 我能想到的唯一解决方案是让类的成员在隐式转换时返回正确的对象类型,而不是依赖于继承。放弃一个/理想的选择以换取易于编程的方法会更好吗?
编辑: 我认为您应该实现接口以能够实现与您的关系(在C#中这样做):
您可以在您的对象中实现此目的:
而且,您将确保DamageCount属性并具有一种允许您添加损坏的方法,而并不意味着人和房屋在某种层次结构中彼此相关。 这可以使用多重继承来完成。在特定情况下(C ++),可以将纯虚拟类用作接口。这使您可以进行多重继承而不会产生范围/模糊性问题。例:
现在,Person和Car'is-a'Damage都意味着实现了Damage接口。纯虚拟类的使用(使它们像接口一样)是关键,应经常使用。它使将来的更改与更改整个系统保持隔离。阅读有关开放式原则的更多信息。 我同意乔恩的观点,但是假设您仍然需要单独的损坏计数器类,则可以执行以下操作:
然后,每个可损坏的类都需要提供自己的Damage_counter()成员函数。这样做的缺点是,它为每个可损坏的类创建一个vtable。您可以改用:
但是,当多个父项具有成员变量时,许多人就不容易拥有多重继承。 多态不需要继承。多态是当多个对象实现相同的消息签名(方法)时得到的结果。 @安德鲁
它们都具有例如共同的功能。我们称之为
然后,您需要动态语言,或者需要它们从公共父类(或接口)扩展。例如。:
然后,您可以在某些非常有用的情况下将 从长远来看,"做对了"将有好处,只要是因为以后维护该系统的人会发现,如果从一开始就做对了,就会更容易理解。 根据语言的不同,您可能会选择多重继承,但是通常简单的接口最有意义。"简单"是指制作一个不会过多尝试的界面。最好有许多简单的接口和一些整体的接口。当然,总会有一个权衡取舍,太多的接口可能会导致有关"接口"被"遗忘" ... @凯文
将损坏计数器作为属性不能使他将带有损坏计数器的对象分类为一个集合。例如,一个人和一辆汽车可能都具有损坏计数器,但是大多数语言中不能包含
在我阅读时,这是他问题的实质。"为了将某些对象视为相同,即使它们不是相同的,我是否应该违反 这个问题确实令人困惑:/ 您的粗体问题非常开放,回答为"取决于",但是您的示例并未真正提供有关所询问的上下文的太多信息。这些话使我感到困惑。
|
最新内容
相关内容
python支持多继承吗
python支持多继承吗,培训,代码,不了,上边,函数,属性,例子,父亲,定义,母亲,python多继承单继承有时候可能满足不了我们所需的所以我们就会遇到python如何实现继承
python如何实现继承,培训,概念,名称,方法,定义,个人,属性,接口,过程,能力,python实现继承的方法:通过继承创建的新类称为“子类”或“派生类”python如何判断对象的某个属性
python如何判断对象的某个属性,培训,异常,名称,方法,对象,属性,特性,参数,逻辑,以上,在python判断某个对象是否具有某属性可以使用以下方法方python类的继承机制
python类的继承机制,代码,培训,方法,定义,对象,机制,口感,语法,圆括号,水果,继承是面向对象的三大特征之一,也是实现代码复用的重要手段。继承python多态是什么
python多态是什么,培训,代码,变量,方法,对象,结果,特性,下面,动物,程序,在面向对象程序设计中,除了封装和继承特性外,多态也是一个非常重要的特python如何实例化对象
python如何实例化对象,培训,名称,实例,括号,关键字,对象,函数,字母,方式,以上,python中同样使用关键字class创建一个类,类名称第一个字母大写,python判断对象是否有某个属性
python判断对象是否有某个属性,培训,名称,异常,属性,对象,方法,参数,定义,以上,更多,python判断对象是否有某个属性的方法:hasattr(object,nampython如何确定是否为可迭代对象
python如何确定是否为可迭代对象,培训,元素,索引,对象,整数,字典,函数,类型,下标,模块,迭代可以理解为,任意的集合使用for循环遍历python中,迭python可以继承父类方法吗
python可以继承父类方法吗,培训,代码,名字,方法,动物,属性,编译器,这样的话,定义,里面,python继承,调用父类属性方法在python里面,继承一个类python怎么判断某一对象是否为字典
python怎么判断某一对象是否为字典,培训,名称,代码,情况,类型,实例,元素,字典,函数,对象,我们经常需要在Python代码中确定某个实例是什么类型python如何查看对象属性
python如何查看对象属性,培训,网络,系统,函数,对象,属性,变量,示例,实例,模块,在Python语言中,有些库在使用时,在网络上找到的文档不全,这就需要python可以多继承吗
python可以多继承吗,代码,培训,不了,方法,属性,父亲,孩子,前缀,上边,变量,python面向对象的主要好处就是代码的重用,实现这一特点通过继承,继承