gpt4 book ai didi

c++ - 表示表达式计算c++(多态设计)

转载 作者:行者123 更新时间:2023-11-28 02:15:31 25 4
gpt4 key购买 nike

我想用C++实现一个很简单的表达式计算器,比如计算

(3 + 2) * 8

所以,我为这样的表达式创建了一个基类:

class Expression {

public:
virtual ~Expression() {}

// Returns the result of evaluating this expression.
virtual float eval() const = 0;

// Prints the expression. DO NOT evaluate before printing.
virtual void print() const = 0;
};

然后,为了表示我只关心 INT 和 FLOAT 的数字,我做了这个:

/*
* Number
*/
class Number : public Expression {

};

class IntNum : public Number {
public:
IntNum(int num) : m_value(num) {}
~IntNum() {}

float eval() const {return (float) m_value;}
void print() const {std::cout << m_value;}
protected:
int m_value;
};

class FloatNum : public Number {
public:
FloatNum(float num) : m_value(num) {}
~FloatNum() {}

float eval() const {return m_value;}
void print() const {std::cout << m_value;}
protected:
float m_value;
};

最后,我想表示ADD,它需要两个操作数:

/*
* Two oprand expression
*/
class TwoOpndExp : public Expression {
public:
TwoOpndExp(Expression* exp1, Expression* exp2) : m_exp1(exp1), m_exp2(exp2) {}
~TwoOpndExp() {}
protected:
Expression* m_exp1;
Expression* m_exp2;
};

/*
* Add expression
*/
class AddExp : public TwoOpndExp {
public:
float eval() const;
void print() const;
};

问题是:我写

TwoOpndExp(Expression* exp1, Expression* exp2) : m_exp1(exp1), m_exp2(exp2) {}

因为没有人知道“+”两边是什么,所以它可以是一个简单的数字,如“1+2”,也可以是相关的表达式,如“1+(2^3)”。所以我认为构造函数的para类型应该是Expression*。但是,当我像这样测试它时:

  IntNum* x = new IntNum(3);
FloatNum* y = new FloatNum(4.1);
AddExp* add = new AddExp(x, y);

编译器说找不到构造函数

AddExp* add = new AddExp(x, y);

我知道该类将包含一些东西作为参数列表以找到正确的构造函数,但是,对于这个问题,如何设计才能使其正确?

这个问题现场可用:

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-088-introduction-to-c-memory-management-and-c-object-oriented-programming-january-iap-2010/assignments/

见 ass5

谢谢。

最佳答案

您需要添加另一个构造函数:

AddExp(Expression* exp1, Expression* exp2) : TwoOpndExp(exp1, exp2) {}

如果没有这个,TwoOpndExp 构造函数不会被继承,因此不可用。

关于c++ - 表示表达式计算c++(多态设计),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34147848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com