c++ 有没有办法在三个类中互相使用type?

wfveoks0  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(134)

当我试图为自己写一个处理代数表达式的库时,我遇到了一个问题。我有三个类:divide,expression,groupexpression,我想在expression和group表达式中使用divide类型,在group表达式中使用expression类型,问题是我还需要在divide类中使用group表达式类型,如下所示:

// * (2x)/(4b)
class Divide{
    //...
    GroupExpression numerator, denumerator;
    //...
}
// * -2Pow(x, 3)
class Expression{
    //...
    Divide pow, multiple;
    //...
}
// * (2x-3ax+Pow(x, 5))/(ax-2x)
class GroupExpression : Divide{
    //...
    vector<Expression> group;
    //...
}

但这不符合编程规则,我们应该先声明它才能使用它。如何排序才符合规则?
我一直在想这个异常,但没有找到任何答案。没有找到任何解决方案,在互联网上,因为我不知道如何搜索这个问题,所以我感谢任何帮助。
有可能这样做吗?

0qx6xfy6

0qx6xfy61#

如果不知道你想做什么,我就不知道正确的设计。
但是一个典型的方法是有一个BaseExpression类,然后你可以有像DivideExpression这样的子类,它们有成员变量denominatornumerator,这些变量本身就是BaseExpression类,这些表达式可能是另一个类的具体示例,比如ExpressionTerm,但是DivideExpression不需要知道这些细节。它所需要知道的只是它们的类型是BaseExpression,这是最先声明的。
现在你想让所有人都能使用的方法,比如打印和求值,都应该是BaseExpression上的方法,更进一步,你可以用一个解析器把文本表达式转换成解析树,然后再把解析树转换成合适的Expression对象。
注意,你不可能不需要一个通用的GroupExpression,因为这个需求可以通过创建一个特定类型表达式的递归树来满足,除了从BaseExpression继承的表达式之外,没有一个表达式需要知道更多关于它们的子表达式的信息。

相关问题