覆盖虚拟成员函数

时间:2018-09-16 22:53:14

标签: c++ oop inheritance

我有以下课程

实体

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

如何重写一个函数,使其完全被重写(即不依赖于变量的声明方式)?

0 个答案:

没有答案