Выражение чисто виртуальное с помощью метода 4. Lone - это подкласс Expression. В выражении есть только 4 чисто виртуальных метода, найденных в Lone, и конструктор и деструктор.
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;
}
}
};
I Я все еще учусь с ++. Он вызывает конструктор и деструктор по умолчанию, но он мне дал: вызывается чисто виртуальный метод - вызывается терминатор без активного исключения - прерывается, когда я вызываю fuction: 1 done (enter) и методуборта или prettyprint. Я думаю, что это может быть вызов чисто виртуального метода класса Expression, но я не могу понять, почему.