动态对象的动态数组

时间:2016-03-19 13:12:16

标签: c++ arrays

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

这是讲师班级

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];

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

2 个答案:

答案 0 :(得分:3)

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

而不是

string courses[];

使用

string *courses;

并将其初始化为

courses = new string[size_of_elements];

要扩展元素数量,您必须

  1. 使用新尺寸分配新阵列
  2. 将旧数组的内容复制到新数组
  3. 仅销毁 旧数组(此处不要销毁新数组!)
  4. 将新数组的地址指定为courses

答案 1 :(得分:0)

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

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;
}

用它来修复错误