对象数组(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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • p标签样式_p标签如何设置字体颜色

    p标签样式_p标签如何设置字体颜色style="line-height:1.6em;text-align:justify;text-indent:2em;"

    2025年5月31日
    5
  • Java版本历史「建议收藏」

    Java版本历史「建议收藏」Java语言自JDK1.0版本以来经历了许多次更新,也在基本程序库中增加了大量的类别和包。从J2SE1.4开始,Java语言的变动由JavaCommunityProcess(JCP)管理,JCP使用Java规范请求(JavaSpecificationRequests,JSRs)来建议和定义对Java平台内容的新增和修改。Java语言由Java语言规范(JavaLanguageSpecification,JLS)定义,对JLS的更改则根据JSR901(页面存档备份,存于互联网档案馆)管理。

    2022年7月9日
    20
  • Mysql增删改查sql语句练习

    Mysql增删改查sql语句练习关于数据库的一些操作:进入mysql命令行:mysql-uroot–p查看所有数据库:showdatabases;创建数据库:createdatabasewgcharsetutf8;删除数据库:dropdatabasewg;选择数据库:usedatabases;查看所有表:showtables;查看创建数据库的语句…

    2022年4月10日
    43
  • 什么是前端框架与后端框架

    什么是前端框架与后端框架什么是框架框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。

    2022年6月7日
    112
  • Java字符串分割方法split()的功能以及使用方法的详细介绍!

    Java字符串分割方法split()的功能以及使用方法的详细介绍!在Java的学习中经常会遇到按照自己的理想情况分割字符串,并根据分割后的结果进行后续操作的问题。对于这些问题就可以使用Java提供的split()方法进而实现,下面详细的介绍它的功能以及使用方法。一、功能    Java提供的String.split()方法可以根据自己的理想情况(自己想要的结果),将目标字符串进行分割从而对分割后的结果进行进一步的操作。用一个例子来说明它的功能:

    2022年6月22日
    70
  • navicat创建唯一索引_如果表创建了唯一索引后

    navicat创建唯一索引_如果表创建了唯一索引后

    2026年2月2日
    5

发表回复

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

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