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


相关推荐

  • 装水的容器大全_盛水的容器什么最好

    装水的容器大全_盛水的容器什么最好原题链接给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 2:输入:he

    2022年8月8日
    1
  • 香农编码简单例题_单链表逆序输出c语言

    香农编码简单例题_单链表逆序输出c语言常量介绍:si:信源符号p(si):该项概率pi:前i-1项累加概率p(s1)+p(s2)+…+p(s(i-1))li:码长,计算公式[-log(p(si))]+1;(下取整)求解步骤:1、将信源符号按从大到小的顺序排列2、求码长li3、求累加概率pi4、将累加概率pi转换为二进制小数,并根据码长li取小数点后li为作为码字介绍:本程序是将原始数据存放到记事本Data.txt中,记事本应…

    2025年8月26日
    7
  • ArcGis二次开发遇到的问题

    ArcGis二次开发遇到的问题在我们刚开始利用.net对arcgis进行二次开发时,费了牛鼻子劲安装好了arcgisengine,也在vs中建立了新项目,拖进去了工具条控件,主页面控件,想要欣赏一下成果的时候,发现一点击启动就报错了:查阅相关资料后发现,在主程序中加入这样两行代码,给程序进行授权,就可以顺利运行了。在这里强烈推荐牟乃夏老师的一系列书籍,从arcgis基础知识到开发自己的gis软件,非常有用。后面有时间我会…

    2022年7月23日
    7
  • javac 与 java的区别[通俗易懂]

    javac 与 java的区别[通俗易懂]java编译器名称是javac,是将源文件编译为字节码文件的程序,而java是java解释器的名称,也就是解释和执行字节码文件的程序。注意:::java源文件必须是具有  .java 扩展名java字节码文件必须具有  .class 扩展名 javac可以将java源文件编译为class字节码文件如javacHelloWorld.java运行javac命令后,如果成功编译没有错误的话…

    2022年5月15日
    57
  • ModelAndView详解

    ModelAndView详解ModelAndView详解WebServlet应用服务器Spring浏览器 ModelAndView的构造方法有7个。但是它们都是相通的。这里使用无参构造函数来举例说明如何构造ModelAndView实例。   ModelAndView类别就如其名称所示,是代表了MVCWeb程序中Model与View的对象,不过它只是方便您一次返回这两个对象的h

    2022年7月18日
    27
  • ora 01031 权限不足_sql权限不足

    ora 01031 权限不足_sql权限不足原因分析:因为当前用户没有对其他用户的表的修改权限,所有报权限不足的错误。解决办法:把自己所有的权限都给用户B。grantallprivilegestoB;

    2022年4月19日
    219

发表回复

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

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