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

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • android 电平信号状态识别View平局

    android 电平信号状态识别View平局

  • netron地址_net in

    netron地址_net in结构化查看自己的模型:支持的模型:ONNX,CoreML,Darknet,Keras,MXNet,TensorFlow,TensorFlowLite,TorchScript,Caffe在线netron:https://lutzroeder.github.io/netron/github:https://github.com/lutzroeder/Netron

    2022年10月19日
  • cmd炫酷代码大全「建议收藏」

    cmd炫酷代码大全「建议收藏」事先准备:新建一个txt,后缀名改成cmd(或bat)里面写代码即可声明:文章目录cmd炫酷代码大全1.循环类1.1.黑客王国1.2.命令tree1.3.我是这条街,这条街,最靓的仔1.4.数字点阵1.5.数字王国加强版2.其他类2.1.观看星球大战完结cmd炫酷代码大全1.循环类1.1.黑客王国coloraechooff:123echo0101010010100101010101010101010101010101010101010101001010101echo10101

  • 汉澳sinox不受openssl心血漏洞影响并分析修复其漏洞代码

    汉澳sinox不受openssl心血漏洞影响并分析修复其漏洞代码OpenSSL心血(HeartBleed)漏洞是openssl在2014-04-07发布的重大安全漏洞(CVE-2014-0160)这个漏洞使攻击者可以从server内存中读取64KB的数据,甚至获取到加密流量的密钥。用户的名字和password。以及訪问的内容。主要影响版本号OpenSSL1.0.1到OpenSSL1.0.1f以及OpenSSL1.0….

  • 微信公众号是html页面吗,微信公众号网页开发

    微信公众号是html页面吗,微信公众号网页开发基本配置1.设置—公众号设置—功能设置—配置JS接口安全域名安全域名配置规则如下2.开发—基本配置开发者密码第一次使用需要重新设置记录开发者ID(AppID)开发者密码(AppSecret)后面会用到3.IP白名单配置推荐填写当前本地开发IP地址和服务器IP地址本地开发地址获取方式服务器IP地址(根据自己的服务器Ip地址自行填写)多个IP地址填写用回车隔开4重要的一步在:微信公众号-开发-接…

  • 基于H5+js开发一款音乐播放器

    基于H5+js开发一款音乐播放器前言:当下音乐播放器不胜其数,为了更好的掌握一些东西,我们来自己制作一个音乐播放器。文章目录:一.开发环境:二.页面视图:1.主文件入口(首页):2.音乐播放界面:三.功能实现(1)、index.html:(2)、播放音乐(music.html):(3)、样式文件(index.css):四.项目地址:一.开发环境:开发工具:HbuliderX;框架:Vant,Mui,Vue后端:Node二.页面视图:正常情况下我们的开发都会有构思图以及模块规划等过程,我们先来看看大致的页面构图:1

发表回复

您的电子邮箱地址不会被公开。

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