动态对象的动态数组

Dynamic Arrays Of Dynamic Objects

本文关键字:动态 数组 对象      更新时间:2023-10-16

我正在尝试实现一个简单的讲师列表,它是动态"讲师"对象的动态数组。首先,我不允许使用STL或向量等。目标是使用默认值在堆上启动动态指导程序数组,当需要添加指导程序时,如有必要,请扩展数组大小。问题是无法使用默认大小初始化教师数组,因为讲师对象的大小也是动态的。有没有处理这个问题的好方法?

这是讲师类

class Instructor{
private:
    string title, firstName, lastName, telNo, roomNo, userName, eMail;
    string courses[];
public:
    Instructor();
    Instructor(string, string, string, string, string, string, string, string);
    string getTitle();
    string getFirstName();
    string getLastName();
    string getTelNo();
    string getRoomNo();
    string getUserName();
    string getEMail();
    string getCourse(int courseIndex);
    void setTitle(string);
    void setFirstName(string);
    void setLastName(string);
    void setTelNo(string);
    void setRoomNo(string);
    void setUserName(string);
    void setEMail(string);
    void setCourse(string);
    void print();
};

我尝试初始化数组的部分:

int size = 5;
Instructor *instructorList;
instructorList = new Instructor[size];

它抛出错误:不允许包含未知大小数组的类型

使用指针来存储数组的(地址)。

而不是

string courses[];

string *courses;

并像

courses = new string[size_of_elements];

要扩展元素的数量,您必须

  1. 分配具有新大小的新数组
  2. 将旧数组的内容复制到新数组
  3. 销毁旧阵列(不要在这里销毁新阵列!
  4. 将新阵列的地址分配给courses

创建一个类似于您的代码的简单示例。它工作正常。

class A {
private:
    char *field;
public:
    A() {};
    A(char *field) : field(field) { }
    char *getField() const {
        return field;
    }
};
int main() {
    int size = 5;
    A *aList = new A[size];
    for (int i = 0; i < size; i++) {
        aList[i] = A((char *) std::to_string(i).c_str());
        std::cout << aList[i].getField();
    }
    return 0;
}

使用它来修复您的错误