摘要类的链接列表

时间:2018-01-26 18:35:26

标签: c++ inheritance linked-list polymorphism

我正在尝试创建一个接口类的链接列表,并且遇到问题。 我无法为列表编写复制构造函数和赋值运算符重载。

以下是所有标头文件https://gist.github.com/itsuzair/4b34fb5d430cbdbaf748fb05908ac87f

我的基类是Device ComputerMobile是从中继承的两个类

我有一个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类)

我非常感谢这方面的任何帮助, 谢谢!

0 个答案:

没有答案