如何在指针的向量上实现派生类的复制构造函数到具有派生类实例的基类
How to implement a copy constructor of the derived class on a vector of pointers to base class which has instances of derived classes?
所以我有一个基类家具,它也是抽象的类,派生的班级床,桌子,椅子和桌子。我正在使用指针的矢量来进行基础家具,在那里我举行了派生类的实例。我还有另一个与家具矢量进行操作的班级收银机。我必须使用我所做的派生类的复制构造函数,而这个代码段的想法是让我以最安全的方式克隆在基类中保存在指针向量中的派生类对象可能的。所以这些是我的复制构造函数:
explicit Desk(const Desk& _desk) : Furniture(_desk), numberOfDrawers(_desk.numberOfDrawers) {};
explicit Table(const Table& _table) : Furniture(_table), numberOfLegs(_table.numberOfLegs) {};
explicit Chair(const Chair& _chair) : Furniture(_chair), numberOfLegs(_chair.numberOfLegs) {};
explicit Bed(const Bed& _bed) : Furniture(_bed), size(_bed.size) {};
以及我到目前为止的想法是:
std::cout << "The object is found: " << furniture[index]->getName() << std::endl;
std::cout << "Price: " << furniture[index]->getPrice() << std::endl;
std::cout << "Code: " << furniture[index]->getCode() << std::endl;
std::cout << "Do you want to copy the purchase of " << furniture[index]->getName() << " ? (Y/N)";
char read;
std::cin >> read;
if (read == 'Y')
{
if (furniture[index]->getName() == "Bed") {
Bed* deskClone = new Bed(dynamic_cast<Bed&>(*furniture[index]));
furniture.push_back(deskClone);
}
if (furniture[index]->getName() == "Desk") {
Desk* bedClone = new Desk(dynamic_cast<Desk&>(*furniture[index]));
furniture.push_back(bedClone);
}
if (furniture[index]->getName() == "Table") {
Table* tableClone = new Table(dynamic_cast<Table&>(*furniture[index]));
furniture.push_back(tableClone);
}
if (furniture[index]->getName() == "Chair") {
Chair* chairClone = new Chair(dynamic_cast<Chair&>(*furniture[index]));
furniture.push_back(chairClone);
}
}
不幸的是,我读到这很危险,所以我想问一下是否有更好的方法可以解决这个问题?顺便说一句:这是我的第一个帖子的家伙不要太刻薄:D
向基类添加纯虚拟克隆功能,覆盖到处覆盖,然后用
代替整个条件汤furniture.push_back(furniture[index]->clone());
如评论中所建议的
virtual Furniture* copy() = 0;
孩子的实施
class Bed
{
...
virtual Furniture* copy() override
{
return new Bed(*this);
}
...
};
相关文章:
- 如何委托派生类使用其父构造函数?
- 如果基类包含双指针成员,则派生类的构造函数
- C++:为什么无法在派生类中访问受保护的构造函数?
- C++派生的类构造函数
- 添加自定义析构函数时,Move 构造函数在派生类中消失
- 在没有默认构造函数的情况下创建的派生对象
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- 如何在派生构造函数中多次构造基类
- C++(控制台)构造函数和派生类
- 为什么为派生类定义复制构造函数需要定义基类的默认构造函数?
- 在dynamic_pointer_cast后调用派生类的构造函数
- C++ 继承基构造函数,但仍调用默认派生构造函数
- 如何在派生构造函数的大括号中初始化基构造函数?C++
- 如何使派生构造函数将串联值传递给其父构造函数
- dynamic_cast派生构造函数内部
- 复制构造函数-是在派生构造函数之前调用的基本构造函数
- 在派生构造函数中调用基方法是不好的做法
- 基构造函数和派生构造函数之间的歧义
- 派生构造函数警告:永远不会被执行
- 如何将在派生构造函数中生成的参数传递给默认构造函数?