継承とポリモーフィズムがC++でどのように処理されるかを理解しようとしていますが、Javaで慣れているものとは少し異なるようです。関数の1つで基本クラスを返そうとしていますが、返されるときは、オブジェクトを派生クラスにします。しかし、それは私にとって期待通りにうまくいきません。
#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";
}