我可以有多个基类吗?
Posted
技术标签:
【中文标题】我可以有多个基类吗?【英文标题】:Can I have more than one base class? 【发布时间】:2020-08-13 15:41:44 【问题描述】:我的代码中可以有多个基类吗?
我想编写一个多项式、序列、对数计算器(我以后可能会添加一些东西)
所以我想做:
class algebraicExpression //should it be algebraicExpression or arithmeticExpression
virtual void gather()=0;
virtual void show()=0;
polynomialWx
、polynomialPx
、sequenceAn
、sequenceBn
、sequenceCn
等类将继承自 algebraicExpression
这两个函数。问题是我应该将addition()
、subtraction()
、multiplication()
和division()
等函数放到algebraicExpression
类中还是创建:
class operation
然后把它放在那里,我知道序列不会使用这些,但 polynomials
和 logarithms
可以,也许我稍后会添加一些新的东西也会使用它。
还有例如:polynomialPx
是否可以继承自基类虚函数和 polynomialWx
属性,例如 int degree
、float coefficients
等。
因为有人告诉我类似钻石问题,但我不知道它是否相关。
【问题讨论】:
在互联网上搜索“C++ 多重继承”。 您可能希望有中间基类:binary_operation
和 unary_operation
。一个代数表达式包含一个或多个二元运算和一个或多个一元运算(它实际上可以有零的一种类型,但必须至少有一个运算)。二元运算有一个运算符和两个操作数。一元运算包含一个操作数和一个运算符。
可以,但是如果你继承的类已经相关或者有冲突的成员标识符,就会变得复杂。
【参考方案1】:
如果所有计算器类都继承自同一个基类,我只会将所有计算器使用的函数放在基类中。 algebraicExpression 类是抽象的,因为您使其中的所有函数都成为纯虚拟的。这很好,因为您不想将该类用作独立类而仅将其用作基础。缺点是,您必须覆盖所有纯虚函数。在你的情况下这很糟糕,因为你不希望所有的函数都包含在所有的计算器中。 您可以使用一个名为操作的类来解决此问题,并且仅在需要时才继承。但问题是,操作类的功能只能使用操作类的成员。这意味着如果您在计算器类中使用操作类的方法,您必须为计算器类编写一个成员函数,然后调用操作符类的函数。 这些操作(加法、除法……)并不复杂。我认为你有点过度设计你的任务。我只会编写函数并在计算器类中使用它们,我认为不需要操作类。 钻石问题在本站讲解:https://www.geeksforgeeks.org/multiple-inheritance-in-c/
如果您保持代码简单,那么您的示例中就不会发生这种情况。 请注意,我不聪明,这个答案可能完全是垃圾。如果你有更好的想法,不要照我说的去做,尝试你自己的想法。
【讨论】:
以上是关于我可以有多个基类吗?的主要内容,如果未能解决你的问题,请参考以下文章