(30.1)对象数组以及指向对象的指针

本文深入探讨了C++中对象数组的定义、使用及初始化过程,解释了构造与析构函数的调用机制。同时,详细介绍了指向对象的指针的概念、定义方式及其在访问对象成员中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.对象数组的定义和使用

  • 可以简单的理解类就是我们自定义的数据类型, 而对象就是类的实例, 因此我们也可以构造对象数组和对象的指针。
  • 将具有相同类类型的对象有序地集合在一起便构成了对象数组, 以一维对象数组为例, 其定义形式为:
类名 对象数组名[常量表达式];
  • 一维对象数组有时也称为对象向量, 它的每个元素都是相同类类型的对象。
    eg:例如表示平面上若干个点, 可以这样定义:
Point points[100];//表示100个点
  • 关于对象数组的说明:
    (1) 在建立对象数组时, 需要调用构造函数。 如果对象数组有100个元素, 就需要调用100次构造函数。
    (2)如果对象数组所属类有带参数的构造函数时, 可用初始化列表按顺序调用构造函数, 使用复制初始化来初始化每个数组元素。
    (3)如果对象数组所属类有单个参数的构造函数时, 定义数组时可以直接在初值列表中提供实参。
    (4)对象数组创建时若没有初始化, 则其所属类要么有合成默认构造函数(此时无其他的构造函数),要么定义无参数的构造函数或全部参数为默认参数的构造函数(此时编译器不再合成默认构造函数) 。[若无定义构造函数,编译器会自己生成合成默认构造函数]
    (5)对象数组的初始化式究竟是什么形式, 本质上取决于所属类的构造函数。 因此, 需要明晰初始化实参与构造函数形参的对应关系, 避免出现歧义性。
    (6)如果对象数组所属类含有析构函数, 那么每当建立对象数组时:
    按每个元素的排列顺序调用构造函数; 每当撤销数组时, 按相反的顺序调用析构函数。
Point P[3]={Point(1,2),Point(5,6),Point(7,8)};//三个实参
Student S[5]={20,21,19,20,15};//Student类中只有一个数据成员

2.指向对象的指针

  • 在建立对象时, 编译器会为每一个对象分配一定的存储空间, 以存放其成员。
    对象内存单元的起始地址就是对象的指针。
    可以定义一个指针变量, 用来存放对象的指针。 指向类对象的指针变量的定义形式为 :
类名 *对象指针变量名=初值;//初值指的是:相同类型的类的地址
  • eg:
class Time
{
	public:
		Time(int h=0, int m=0, int s=0):hour(h), minute(m), second(s){}
		void set(int h=0, int m, int s=0)
		{
			hour=h;
			minute=m;
			second=s;
		}
};

Time now(12,0,0),*pt;//指向对象的指针变量
pt=&now;
  • 可以通过对象指针访问对象和对象的成员。如:
pt->set(13,13,0);
pt->hour=1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值