【问题标题】: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;
}

polynomialWxpolynomialPxsequenceAnsequenceBnsequenceCn 等类将继承自 algebraicExpression 这两个函数。问题是我应该将addition()subtraction()multiplication()division() 等函数放到algebraicExpression 类中还是创建:

class operation

然后把它放在那里,我知道序列不会使用这些,但 polynomialslogarithms 可以,也许我稍后会添加一些新的东西也会使用它。

还有例如:polynomialPx 是否可以继承自基类虚函数和 polynomialWx 属性,例如 int degreefloat coefficients 等。

因为有人告诉我类似钻石问题,但我不知道它是否相关。

【问题讨论】:

  • 在互联网上搜索“C++ 多重继承”。
  • 您可能希望有中间基类:binary_operationunary_operation。一个代数表达式包含一个或多个二元运算和一个或多个一元运算(它实际上可以有零的一种类型,但必须至少有一个运算)。二元运算有一个运算符和两个操作数。一元运算包含一个操作数和一个运算符。
  • 可以,但是如果你继承的类已经相关或者有冲突的成员标识符,就会变得复杂。

标签: c++ class polymorphism


【解决方案1】:

如果所有计算器类都继承自同一个基类,我只会将所有计算器使用的函数放在基类中。 algebraicExpression 类是抽象的,因为您使其中的所有函数都成为纯虚拟的。这很好,因为您不想将该类用作独立类而仅将其用作基础。缺点是,您必须覆盖所有纯虚函数。在你的情况下这很糟糕,因为你不希望所有的函数都包含在所有的计算器中。 您可以使用一个名为操作的类来解决此问题,并且仅在需要时才继承。但问题是,操作类的功能只能使用操作类的成员。这意味着如果您在计算器类中使用操作类的方法,您必须为计算器类编写一个成员函数,然后调用操作符类的函数。 这些操作(加法、除法……)并不复杂。我认为你有点过度设计你的任务。我只会编写函数并在计算器类中使用它们,我认为不需要操作类。 钻石问题在本站讲解:https://www.geeksforgeeks.org/multiple-inheritance-in-c/

如果您保持代码简单,那么您的示例中就不会发生这种情况。 请注意,我不聪明,这个答案可能完全是垃圾。如果你有更好的想法,不要照我说的去做,尝试你自己的想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 2014-08-03
    相关资源
    最近更新 更多