我有以下课程
实体
class Entity {
public:
virtual std::ostream& write(std::ostream& os) const {
os << "Can't output Entity";
return os;
}
};
和StringEntity
class StringEntity : public Entity {
public:
std::string data;
StringEntity(std::string str) {
data = str;
}
std::ostream& write(std::ostream& os) const {
os << data;
return os;
}
};
像这样使用这些类
int main(int argc, char** argv) {
StringEntity entity = StringEntity("MY STRING ENTITY");
Entity gen_ent = (Entity) entity;
entity.write(std::cout) << std::endl;
gen_ent.write(std::cout) << std::endl;
return 0;
}
由于基本Entity类的write函数是虚拟的,并且派生的StringEntity类中的write被覆盖,因此我希望两个write语句都能打印出MY STRING ENTITY
。相反,第一个正确打印MY STRING ENTITY
,但是第二个正确打印Can't output Entity
。
如何重写一个函数,使其完全被重写(即不依赖于变量的声明方式)?