C++对象数组
- 一、对象数组的定义
- 二、对象数组的特性
- 三、对象数组的使用
- 3.1 构造函数没有参数
- 3.2 构造函数有一个参数
- 3.3 构造函数有多个参数
- 四、为什么要使用对象数组?
一、对象数组的定义
所谓对象数组,指每一个数组元素都是对象的数组,即若一个类有若干个对象,我们把这一系列的对象用一个数组来存放。对象数组的元素是对象,不仅具有数据成员,而且还有函数成员。
二、对象数组的特性
1、在建立对象数组的时候需要调用构造函数,有多少个对象就要调用多少次构造函数。
2、如果对象数组含有析构函数,那么建立对象数组时按每个元素出现的顺序调用构造函数,按相反的顺序调用析构函数。
3、对象数组的初始化究竟是什么形式,本质上取决于所属类的构造函数。
如果对象数组所属类有带参数的构造函数,可用初始化列表按顺序调用构造函数,使用复制初始化来初始化每个数组元素。
如果对象数组所属类有单个参数时,定义数组时可以直接在初始化列表中提供实参。
对象数组创建时若没有初始化,则其所属类要么有合成默认构造函数,要么定义无参数的构成函数或全部参数为默认参数的构造函数。
三、对象数组的使用
3.1 构造函数没有参数
各元素对象的初值要求为相同的值时,应该在类中定义不带参数的构造函数或者是默认构造函数。
#include<iostream>
using namespace std;
class exam {
public:exam() {x = 2022;}int getX() {return x;}~exam() {};
private:int x;
};
int main()
{exam a[5];for (int i = 0; i < 5; i++){cout << a[i].getX() << " ";}cout << endl;return 0;
}
3.2 构造函数有一个参数
#include<iostream>
using namespace std;
class exam {
public:exam() {x = 2022;}exam(int a) {x = a;}int getX() {return x;}~exam() {};
private:int x;
};
int main()
{exam a[5]={0,1,2,3,4};exam b[5] = { 0,1};exam c[5];for (int i = 0; i < 5; i++){cout << a[i].getX() << " ";}for (int i = 0; i < 5; i++){cout << b[i].getX() << " ";}for (int i = 0; i < 5; i++){cout << c[i].getX() << " ";}cout << endl;return 0;
}
3.3 构造函数有多个参数
各元素对象的初值要求为不同的值时,需要定义带形参的构造函数。
#include<iostream>
#include<cmath>
using namespace std;
class Complex{public:Complex(double r=0.0,double i=0.0):real(r),imag(i){}~Complex(){cout<<"Destructor called."<<endl;}double abscomplex(){double t;t=real*real+imag*imag;return sqrt(t);}private:double real;double imag;
};
int main(){Complex com[3]={ //定义对象数组Complex(1.1,2.2), //调用构造函数,为第1个对象数组元素提供实参1.1和2.2 Complex(3.3,4.4), //调用构造函数,为第2个对象数组元素提供实参3.3和4.4 Complex(5.5,6.6) //调用构造函数,为第3个对象数组元素提供实参5.5和6.6 };cout<<"复数1的绝对值是:"<<com[0].abscomplex()<<endl;cout<<"复数1的绝对值是:"<<com[1].abscomplex()<<endl;cout<<"复数1的绝对值是:"<<com[2].abscomplex()<<endl;return 0;
}
四、为什么要使用对象数组?
C++中使用对象数组的主要原因是可以方便地创建多个对象,并且可以通过下标访问和操作这些对象。对象数组可以用于存储和处理大量的数据。
例如在游戏开发中,可以使用对象数组来存储和管理游戏中的角色、道具等信息。此外,对象数组还可以用于实现一些数据结构,例如队列、栈等。
在使用对象数组时,需要注意对象的构造函数和析构函数的调用,以及对象数组的初始化方式。