对象数组(C++学习笔记 20)

一、对象数组的定义

所谓对象数组,指每一个数组元素都是对象的数组,即若一个类有若干个对象,我们把这一系列的对象用一个数组来存放。对象数组的元素是对象,不仅具有数据成员,而且还有函数成员。

定义一个一维数组的格式如下:
类名 数组名[下标表达式]

与基本数据类型的数组一样,在使用对象数组时也只能访问单个数组元素,其一般形式为:
数组名[下标].成员名

在建立数组时,同样要调用构造函数。有几个数组元素就要调用几次构造函数。

二、构造函数有0个或1个参数

如果构造函数只有1个参数,在定义对象数组时可以直接在等号后面的花括号内提供实参来实现初始化。
例 1: 用只有1个参数的构造函数给对象数组赋值。

#include<iostream>
using namespace std;
class exam{
	public:
		exam(int n){  //只有1个参数的构造函数 
			x=n;
		}
		int get_x(){
			return x;
		}
	private:
		int x;
};
int main(){
	exam ob1[4]={11,22,33,44};  //用只有1个参数的构造函数给对象数组赋值 
	for(int i=0;i<4;i++)
		cout<<ob1[i].get_x()<<" ";
	return 0;
}

当各个元素的初始值相同时,可以在类中定义不带参数的构造函数或带有默认参数值的构造函数;当各元素的对象的初值要求为不同时,需要定义带参数(无默认值) 的构造函数。
例2: 用不带参数和带1个参数的构造函数给对象数组赋值。

#include<iostream>
using namespace std;
class exam{
	public:
		exam(){
			x=123;
		}
		exam(int n){
			x=n;
		}
		int get_x(){
			return x;
		}
	private:
		int x;
};
int main(){
	exam ob1[4]={11,22,33,44};
	exam ob2[4]={55,66};
	exam ob3[4];
	for(int j=0;j<4;j++){
			cout<<ob1[j].get_x()<<" ";
	}
	cout<<endl;
	for(int j=0;j<4;j++){
			cout<<ob2[j].get_x()<<" ";
	}
	cout<<endl;
	for(int j=0;j<4;j++){
			cout<<ob3[j].get_x()<<" ";
	}
	return 0;
}

运行结果:
在这里插入图片描述

三、构造函数有多个参数

如果构造函数有多个参数,在定义对象数组时只需在花括号中分别写出构造函数并指定实参即可实现初始化。

例3: 用带有2个参数的构造函数给对象数组赋值。

#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;
}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/aaqian1/article/details/84061049
今日推荐