对象数组(C++学习笔记 20)[通俗易懂]

对象数组(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;
}

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157882.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java:遍历数组的三种方法[通俗易懂]

    Java:遍历数组的三种方法[通俗易懂]1、for循环遍历数组用for循环遍历数组是很常见的一种方法,Java语言中通过数组的length属性可获得数组的长度。packagedemo;publicclasstest{ publicstaticvoidmain(String[]args){ int[]array={1,2,3,4,5}; for(inti=0;i<array.length;i++){ System.out.print(array[i]+””); } }

    2022年9月2日
    2
  • 剑指 Offer 56 – II. 数组中数字出现的次数 II

    剑指 Offer 56 – II. 数组中数字出现的次数 II在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums = [3,4,3,3]输出:4示例 2:输入:nums = [9,1,7,9,7,9,7]输出:1限制:1 <= nums.length <= 100001 <= nums[i] < 2^31设置一个数组代表32位,每一位代表当前所有数组中当前位出现次数之和。然后%3,然后拼凑class Solution {public: in

    2022年8月8日
    4
  • HTML 空格转义符的用法

    HTML 空格转义符的用法记录一下,空格的转义字符分为如下几种:1.&nbsp;&160#;不断行的空白(1个字符宽度)2.&ensp;&8194#;半个空白(1个字符宽度)3.&a

    2022年8月6日
    3
  • 小红书用户画像分析_抖音用户画像分析及活跃时间点「建议收藏」

    小红书用户画像分析_抖音用户画像分析及活跃时间点「建议收藏」今天小编来和大家分享一下,抖音用户画像的分析和抖音用户的活跃时间点,1、重点的画像,是抖音受众人群高低线及分布率。2、查询数据的技巧,如果是产品的话参考到阿里指数上查看,如果查行业的话,可以在百度上查看行业报告。在看数据的时候,要清楚你要从数据中得到什么,给我们启发是什么?做抖音要了解抖音上都有哪些人群,找准相对应的人群才能达成转化。3、抖音视频的活跃大约时间上午高峰是12:00晚上…

    2022年6月11日
    209
  • iic通信协议原理(https协议原理)

    一、基本概念。I2C总线(I2Cbus,Inter-ICbus)是一个双向的两线连接总线,提供集成电路之间的通信线路。I2C属于一种串行扩展技术,广泛应用于电视、录像机、音频设备。I2C的意思是“完成集成电路或者功能单元之间信息交换的规范或协议”,采用一条数据线(SDA)和一条时钟线(SCL)来完成数据的传输以及外围器件的扩展。通信的原理是控制SCL和SDA的时序,时期满足总线协议从而进…

    2022年4月14日
    51
  • springboot实现ajax跨域请求

    springboot实现ajax跨域请求有段时间没写文章了。看到有人提问ajax跨域请求的问题。博主要再次强调,跨域,就是从不同的的IP端口获取数据,比如说,从www.baidu.com获取数据,就叫跨域!那么localhost:8080与localhost:8081之间呢?也叫跨域。如果处理的不好,就会报错,不仅前端报错,后端也会报错。那么如何解决呢?着急的人,请直接往下看,不急的请听我细细道来,一定能解决您的问题。我再此保证

    2022年6月17日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号