使用4方法表达是纯虚拟的。 Lone是Expression的子类。 Expression仅具有Lone中的4种纯虚拟方法以及构造函数和析构函数。
Expression::~Expression() {};
Expression::Expression() {
};
Lone::~Lone() {
cout << "Destroy Lone" << endl;
};
Lone::Lone(int val) {
this->val = val;
cout << "create Lone" << endl;
};
string Lone::prettyprint() {
ostringstream result;
result << this->val;
string ans = result.str();
return ans;
};
void Lone::set(string var, int val) {
};
void Lone::unset(string var) {
};
int Lone::evaluate() {
cout << "eval Lone" << endl;
return this->val;
};
重载的输入运算符
istream &operator>>(istream &in, Expression *&e) {
string s;
vector<Expression*> v;
while (in >> s) {
istringstream ss(s);
int n;
if (ss >> n) {
Lone temp{n};
Expression* exp{&temp};
v.emplace_back(exp);
} else if (s == "done") {
e = v[0];
break;
}
return in;
};
主要功能
int main () {
string s;
Expression *e;
cin >> e;
// Command interpreter
while (cin >> s) {
if (s == "eval") {
e->evaluate();
}
else if (s == "set") {
string name;
int val;
if (cin >> name >> val) {
(*e).set(name, val);
}
}
else if (s == "unset") {
string name;
if (cin >> name) {
(*e).unset(name);
}
}
else if (s == "print") {
string result = e->prettyprint();
cout << result;
}
}
};
我还在学习c ++。 它正在调用默认的构造函数和析构函数,但是给了我:调用纯虚拟方法-在没有活动异常的情况下终止调用-在我调用功能时中止:1 done(enter)并求值或prettyprint方法。 我认为它可能正在调用Expression类的纯虚拟方法,但我不知道为什么。