C++对象数组

一、对象数组概述

C++ 对象数组是一个数组,其中的元素是类的对象。与基本数据类型数组(如整数数组、浮点数数组)不同,对象数组中的每个元素都是一个类的实例。因此,对象数组在创建时会调用对象的构造函数,而在销毁时会调用对象的析构函数。

二、对象数组定义与使用

定义一个一维对象数组的格式

类名 数组名[下标表达式]

使用一维对象数组的一般格式

数组名[下标].成员名

#include <iostream>
#include <string>

class Person {
private:
    std::string name;
    int age;

public:
    // 构造函数
    Person(std::string newName = "Unknown", int newAge = 0) : name(newName), age(newAge) {
        std::cout << "Constructor called for " << name << std::endl;
    }

    // 析构函数
    ~Person() {
        std::cout << "Destructor called for " << name << std::endl;
    }

    // 打印个人信息的成员函数
    void printInfo() const {
        std::cout << "Name: " << name << ", Age: " << age << std::endl;
    }
};

int main() {
    // 创建一个包含 3 个 Person 对象的数组
    Person people[3] = {
        Person("Alice", 30),
        Person("Bob", 25),
        Person("Charlie", 20)
    };

    // 打印每个对象的信息
    for (int i = 0; i < 3; ++i) {
        people[i].printInfo();
    }

    // 数组超出作用域时,每个对象的析构函数会自动被调用
    return 0;
}

在这个示例中,我们定义了一个 Person 类,并为其提供了一个带有默认参数的构造函数和一个析构函数。然后,我们在 main() 函数中创建了一个包含 3 个 Person 对象的数组 people

三、创建对象数组的步骤

  1. 定义类:首先定义一个类,如示例中的 Person 类。
  2. 声明数组:声明一个类对象的数组。例如,Person people[3]; 创建了一个包含 3 个 Person 对象的数组。
  3. 初始化数组:可以在声明数组时使用初始化列表来初始化每个对象,如 Person people[3] = { Person("Alice", 30), Person("Bob", 25), Person("Charlie", 20) };
  4. 使用对象:可以使用数组中的对象,就像使用普通数组元素一样。例如,people[i].printInfo();

四、给对象数组赋值

示例分别使用不带参数的构造函数,带一个参数的构造函数,带有多个参数的构造函数给对象数组赋值:

#include <iostream>
#include <string>

class Person {
private:
    std::string name;
    int age;

public:
    // 不带参数的构造函数
    Person() : name("Unknown"), age(0) {
        std::cout << "Default constructor called for " << name << std::endl;
    }

    // 带一个参数的构造函数
    Person(std::string newName) : name(newName), age(0) {
        std::cout << "Constructor with one parameter called for " << name << std::endl;
    }

    // 带多个参数的构造函数
    Person(std::string newName, int newAge) : name(newName), age(newAge) {
        std::cout << "Constructor with two parameters called for " << name << std::endl;
    }

    // 打印个人信息的成员函数
    void printInfo() const {
        std::cout << "Name: " << name << ", Age: " << age << std::endl;
    }
};

int main() {
    // 创建一个包含 3 个 Person 对象的数组
    // 使用不同的构造函数初始化每个对象
    Person people[3] = {
        Person(), // 使用不带参数的构造函数
        Person("Alice"), // 使用带一个参数的构造函数
        Person("Bob", 25) // 使用带多个参数的构造函数
    };

    // 打印每个对象的信息
    for (int i = 0; i < 3; ++i) {
        people[i].printInfo();
    }

    // 数组超出作用域时,每个对象的析构函数会自动被调用
    return 0;
}

说明:

  1. 不带参数的构造函数Person() 用于初始化没有提供参数的对象,默认将 name 设置为 "Unknown"age 设置为 0

  2. 带一个参数的构造函数Person(std::string newName) 用于初始化提供了一个参数的对象,将 name 设置为 newNameage 设置为 0

  3. 带多个参数的构造函数Person(std::string newName, int newAge) 用于初始化提供了两个参数的对象,将 name 设置为 newNameage 设置为 newAge

输出代码

Default constructor called for Unknown
Constructor with one parameter called for Alice
Constructor with two parameters called for Bob
Name: Unknown, Age: 0
Name: Alice, Age: 0
Name: Bob, Age: 25

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值