创建和访问类对象的动态数组

Creating and accessing a dynamic array of class objects

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

我一直在研究一个处理电话目录的项目。我的程序从数据表中读取数据,并创建一系列电话。

我有两个类:软电话和舰队。

软电话包含电话(私有)的所有值,并获取/设置和打印功能以访问它们(公共)。

class softphone {
public:
    string name;
    //All my other variables
public:
    softphone();
    softphone(const softphone &obj);
    ~softphone();
    //Get functions
    string get_name();
    //ect
    //Set functions
    void set_name(string);
    //ect
    //Print functions
    void print_name();
    //ect
}

车队包含

的手机和输出操作功能的数组
class fleet {
private:
    //Some variables and buffers
    softphone* phone; ->This is the array containing all the phones 

public:
//Read file and create array functions
//Functions
void print_fleet();
    //More output functions
};

车队类有一个指向软电话的指针,我用它动态创建了一系列电话。它通过从文件中读取目录来创建数组。(我不知道运行时间之前有多少个电话。)

它计算文件中的行数,然后创建和数组足够大以容纳所有数据:

phone = new softphone[number_of_lines - 1]; //Line 1 is header

它从文件中读取,使用设置功能保存数据,然后我使用 电话 ;

到目前为止一切都很好。现在,如果我想访问这些电话并致电成员函数。

phone[0].print_name();

编译器没有给我任何错误,但输出是垃圾(屏幕上的无限随机字符。)我在内存位置在内存位置得到一个std :: bad_alloc。

for(int i = 0; i < (number_of_lines - 1); i++){
    phone--
}
phone->print_name();

现在起作用。这样,我可以访问所有手机并将其打印出来。所有数据都在那里。但是我必须递增/减少指针,并且无法使用索引号。

如何使用索引号?当我使用时,为什么计算机会发疯,但是当我递增时很好?

感谢您的答复,

创建数组时,电话指向第一个元素。之后,您开始递增指针,直到到达数组的末端。那时,电话不再指向数组的开始。然后,您可以运行循环,该循环返回指针,直到它重新回到开始并开始重新工作。我建议您停止使用指针算术,而只是使用索引。然后,您可以放心,电话总是指向数组的开始。或者,您可以分配一个不同的变量,并将其用于指针填充数组。或者,您可以按建议使用std :: vector。