我试图弄清楚 C++ 中如何处理继承和多态性,这似乎与我在 Java 中习惯的有点不同。我试图在其中一个函数中返回一个基类,但是当收到返回时,我希望该对象成为派生类。但是,它并没有像我预期的那样工作。
#include "Prefixer.h"
using namespace std;
Prefixer::Prefixer( Lexer l ){
lexer = l;
}
Expr Prefixer::expr() {
Expr left = term();
Expr right = termTail();
cout << left.name();
cout << right.name();
return left;
}
Expr Prefixer::term() {
NullExpr temp;
return temp;
}
Expr Prefixer::termTail() {
NullExpr temp;
return temp;
}
但是返回的 left.name() 和 right.name() 都调用了 Expr(基类)的虚拟 name() 函数:C。我怎样才能让他们从派生类 NullExpr 调用重载的 name() 函数?
string Expr::name() {
return "expr";
}
string NullExpr::name() {
return "null";
}