[C++]对象数组

在C++中,对象数组是一种非常有用的数据结构,它允许你存储和操作同一类型的多个对象。与基本数据类型数组不同,对象数组中的每个元素都是一个完整的对象,包含该类型所有的属性和方法。这里,我们将探讨C++中对象数组的创建、初始化、访问以及遍历。

1. 创建对象数组

在C++中,你可以使用与普通数组相同的语法来创建对象数组,但是数组的元素类型是自定义的类或结构体。

class MyClass {  
public:  
    int data;  
    MyClass(int val) : data(val) {} // 构造函数  
    void display() {  
        std::cout << "Data: " << data << std::endl;  
    }  
};  
  
int main() {  
    MyClass objArray[5]; // 创建一个包含5个MyClass类型对象的数组  
    // 初始化(稍后介绍)  
    return 0;  
}
2. 初始化对象数组

对象数组的初始化可以通过构造函数在数组声明时完成,或者在声明后单独对每个元素进行初始化。

  • 使用构造函数初始化(C++11及以后版本推荐使用列表初始化):
    MyClass objArray[5] = {{1}, {2}, {3}, {4}, {5}}; // 使用构造函数初始化

    或者使用C++11的列表初始化(更简洁):

    MyClass objArray[5] = {1, 2, 3, 4, 5}; // 假设MyClass有一个接受int的构造函数
  • 单独初始化
    for(int i = 0; i < 5; ++i) {  
        objArray[i] = MyClass(i + 1); // 使用构造函数为每个元素赋值  
    }
3. 访问对象数组

访问对象数组中的元素与访问基本数据类型数组类似,使用索引操作符[]

for(int i = 0; i < 5; ++i) {  
    objArray[i].display(); // 访问每个对象并调用其display方法  
}
4. 遍历对象数组

遍历对象数组通常使用循环结构,如上例所示。但你也可以考虑使用C++11引入的范围for循环(也称为基于范围的for循环),这可以使代码更加简洁。

for(auto& obj : objArray) {  
    obj.display(); // 直接在循环体中操作每个对象  
}
5. 注意事项
  1. 构造函数和析构函数:当对象数组被创建时,其所有元素都会被调用构造函数进行初始化。同样地,当数组超出作用域被销毁时,其所有元素也会被调用析构函数进行清理。
  2. 动态数组:对于需要动态改变大小的对象数组,可以使用std::vector<MyClass>代替原生数组。std::vector提供了更多的灵活性和安全性。
  3. 拷贝和赋值:对象数组在拷贝和赋值时需要特别注意,因为默认情况下,对象是按值传递的,这可能导致性能问题(如深拷贝的开销)或意外的行为(如指针共享)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值