我将很多来自 Java 的假设带到了我对 C++ 的学习中,这似乎再次难倒了我。我没有足够的词汇量来雄辩地说出我希望从以下程序中看到的内容,所以我只是呈现它并说出我希望看到的内容:
#include <iostream>
#include <vector>
using namespace std;
class Piece {};
class Man : public Piece {};
class Square {
Piece p;
public:
Square(Piece p) : p(p) { };
Piece get_piece() const { return p; }
};
ostream& operator<<(ostream& os, const Piece& p)
{
cout << "Piece";
return os;
}
ostream& operator<<(ostream& os, const Man& m)
{
cout << "Man";
return os;
}
ostream& operator<<(ostream& os, const Square& s)
{
cout << s.get_piece() << '\n';
return os;
}
int main()
{
Square sq = Square(Man());
cout << sq;
}
当我运行这个程序时,输出是Piece
,但我希望看到Man
。这是否称为运行时多态性?我认为这是保留给功能的,但我不知道。Java 中的“等效”程序打印出我所期望的Man
,但我不知道如何让这个 C++ 程序做到这一点。我错过了什么?