我想要保存一个没有对象切片的Base类实例的向量(这样我也可以存储没有问题的Base的子实例),同时保持多态行为,而不是通过复制值而是通过引用添加到列表中.
请考虑以下源文件:
#include <iostream>
#include <string>
#include <vector>
#include <memory>
class Entity
{
public:
Entity(){this->edited = false;}
virtual std::string name() = 0;
bool edited;
};
class Player: public Entity
{
public:
Player(): Entity(){}
std::string name(){return "player";}
};
int main()
{
std::vector<Entity*> entities;
Player p;
entities.push_back(&p);
entities.at(0)->edited = true;
Entity* ent = entities.at(0);
std::cout << "ent = " << ent->name() << ", edited = " << ent->edited << ".\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我获得以下输出:
ent = player, edited = 1.
Run Code Online (Sandbox Code Playgroud)
当输出显示(通过打印出"播放器"并显示"已编辑"中的更改)时,由于原始指针而保持多态行为,并且我能够毫无问题地编辑列表成员.
澄清我在问什么:我可以使用std …