【发布时间】:2023-04-07 04:32:01
【问题描述】:
我有一个基类、2 个派生类和一个 entitymanager 类,该类有一个指向派生对象的基指针容器。我在基类中有一个虚拟克隆方法来处理派生类中的复制构造函数,但是我在重载赋值运算符和防止切片方面遇到了麻烦,有人可以帮忙,也许可以回顾一下我是如何处理的entitymanager 复制构造函数?我觉得还可以
class System
{
public:
virtual System* clone()=0;
};
class projectile :public System
{
public:
projectile* clone()
{
return new projectile(*this);
}
};
class player : public System
{
public:
player* clone()
{
return new player(*this);
}
};
class EntityManager
{
private:
vector<System*> theEntities;
public:
EntityManager(){}
EntityManager(EntityManager& other)
{
for (size_t i=0;i<other.theEntities.size();i++)
theEntities.push_back(other.theEntities[i]->clone());
}
void init()
{
projectile* aProjectile = new projectile;
player* aPlayer = new player;
theEntities.push_back(aProjectile);
theEntities.push_back(aPlayer);
}
};
int main (int argc, char * const argv[])
{
EntityManager originalManager;
originalManager.init();
EntityManager copyManager(originalManager);
return 0;
}
【问题讨论】:
-
您是否遇到过特定的错误/问题?如果这只是一个代码审查问题,更适合codereview.stackexchange.com。
-
我的具体问题是我需要知道如何在给定多态容器的情况下重载赋值运算符。
-
@coolmrcroc 您能否提供一个您认为可能发生切片的具体示例?
-
到目前为止我什么都没做。我只需要知道如何重载赋值运算符。
标签: c++ inheritance operator-overloading assignment-operator