创建和访问类对象的动态数组
Creating and accessing a dynamic array of class objects
我一直在研究一个处理电话目录的项目。我的程序从数据表中读取数据,并创建一系列电话。
我有两个类:软电话和舰队。
软电话包含电话(私有)的所有值,并获取/设置和打印功能以访问它们(公共)。
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。
相关文章:
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 输出没有重复元素的动态数组(收缩数组)C++
- 正在插入动态数组
- 如何在动态数组上使用搜索函数
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 静态数组的自由动态数组
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 为什么 c++ 动态数组的大小没有改变?
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 指针的 C++ 动态数组 - 何时需要使用它?
- 删除动态数组时未定义标识符
- 哈希映射使用 nullptr c++ 初始化节点的动态数组
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 动态数组的 C++ 重载加运算符
- 基于数组的列表 - 动态数组创建时出错