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++中使用对象数组的主要原因是可以方便地创建多个对象,并且可以通过下标访问和操作这些对象。对象数组可以用于存储和处理大量的数据。
例如在游戏开发中,可以使用对象数组来存储和管理游戏中的角色、道具等信息。此外,对象数组还可以用于实现一些数据结构,例如队列、栈等。
在使用对象数组时,需要注意对象的构造函数和析构函数的调用,以及对象数组的初始化方式。