我正在尝试创建一个接口类的链接列表,并且遇到问题。 我无法为列表编写复制构造函数和赋值运算符重载。
以下是所有标头文件https://gist.github.com/itsuzair/4b34fb5d430cbdbaf748fb05908ac87f
我的基类是Device
Computer
和Mobile
是从中继承的两个类
我有一个Store
类,其中有两个指向Device
类型的指针,它将是可用和已售设备的两个链接列表。
以下是addDevice
功能
void Store::addDevice(int type, int ID, int memSize, int storageSize, int processorSpeed, int screenSize, bool a, bool b, bool c, bool d) {
if (type == 1) {
addMobile(availableDevices, ID, memSize, storageSize, processorSpeed, screenSize, a, b, c);
} else {
addPC(availableDevices, ID, memSize, storageSize, processorSpeed, screenSize, a, b, c, d);
}
}
和addMobile
函数
void addMobile(Device* &devices, int ID, int memSize, int storageSize, int processorSpeed, int screenSize, bool hasNetAdapter, bool hasCamera, bool hasMic) {
if (devices == nullptr) {
devices = new Mobile(ID, memSize, storageSize, processorSpeed, screenSize, hasNetAdapter, hasCamera, hasMic);
} else {
Device* temp = devices;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = new Mobile(ID, memSize, storageSize, processorSpeed, screenSize, hasNetAdapter, hasCamera, hasMic);
}
}
在这种情况下,当调用函数时,我传递了type参数并为该设备类型调用了相应的函数。
除了复制构造函数和赋值运算符之外,我在尝试找出一种方法来确定它在链表中的节点类型时遇到了问题。
由于节点可以是移动节点或计算机,因此如果不明确存储它,就无法区分它。
所以说我有sellDevice()
函数我要从availableDevices
列表中删除该项并将其添加到soldDevices
列表中我不能这样做因为我不知道是什么它的设备类型。
我将循环遍历availableDevices列表并查找具有所需id的设备,但之后我必须在soldDevices列表中创建一个Mobile或Computer类型的新对象,但这是不可能的,因为我不知道该类型。
如果我在我的Device类中保留一个类型变量,那么即使我能够识别对象类型,但由于列表是设备类型,我无法访问子类的成员,即移动/计算机。
另外我想知道是否可以为接口类创建一个复制构造函数(在我的例子中是Device类)
我非常感谢这方面的任何帮助, 谢谢!