首页 > 解决方案 > istream 重载,第二个参数是双指针?

问题描述

我的问题是实现这一点的正确方法是什么,我将如何使用它?要重载的运算符具有以下原型:

//Reads a variable from an input stream
//A variable should have a one-word name that does not start with a digit or minus sign
istream& operator>>(istream& in, Variable** v)

我们得到了一个变量类和一个方程类。我认为重载 istream 运算符的目标是在从字符串创建方程式对象时使事情变得更容易。你可以在下面找到它。我实现这一点的尝试如下:

istream& operator>>(istream& in, Variable** v)
{
  string i;
  in >> i;
  if (isalpha(i[0]) && i[0] != '-') 
    *v = new Variable(i); 
  return in;
}

变量类:

class Variable : public Operand
{
private:
  static unordered_map<string, int> vars;
  string name;
public:
  Variable(string);
  virtual int getValue() const override;
  void setValue(int);
};

方程类:

class Equation
{
private:
  Variable* var; 
  Operand* lhs;
  operator_t op;
  Operand* rhs;
public:
  Equation(string);
  int evaluate();
  //Should also implement copy constructor and copy assignment (rule of three)
  ~Equation();
};

标签: c++

解决方案


推荐阅读