文章目录

  • 一、对象数组
  • 二、对象指针

一、对象数组

1、概念
对象数组本质上就是:数组中每一个元素都是同一个类的对象。

//定义对象数组(装有3个对象的数组)
Box aa[3]={Box(1, 1, 1),  //对三个对象分别定义,并初始化构造函数(传入参数)Box(2, 2, 2),Box(3, 3, 3)
};

2、练习代码

#include <iostream>
using namespace std;//声明一个类为Box
class Box
{public://声明带有默认参数的构造函数,该构造函数给私有成员赋值 Box(int h=10, int w=12, int len=15): height(h),   width(w), length(len){  }int Volume();  //声明一个计算体积的函数
private:int height;int width;int length;
};//对共有成员函数进行定义
int Box::Volume()
{return(height * width * length);  //返回计算的体积
}int main()
{//定义对象数组(装有3个对象的数组) Box aa[3]={Box(1, 1, 1),  //对三个对象分别定义,并初始化构造函数(传入参数)Box(2, 2, 2),Box(3, 3, 3) };cout << "对象盒子1的体积为:"  << aa[0].Volume() << endl;  //调用对象数组中对象1的Volume函数cout << "对象盒子2的体积为:"  << aa[1].Volume() << endl;  //调用对象数组中对象2Volume函数cout << "对象盒子3的体积为:"  << aa[2].Volume() << endl;  //调用对象数组中对象3的Volume函数
}

二、对象指针

1、概念
对象指针本质上就是:指向对象成员的指针。
这个对象存储空间的起始地址就是对象的指针,可以定义一个指针变量,用来存放对象的地址,这就是指向对象的指针变量。

2、对象指针的用法规则

  • 定义指向对象的指针形式:类名 *对象指针名;
    定义指向数据成员的指针:对象指针名*成员名;
//假如已经定义了一个Time类,则对象指针的使用如下:
Time *pt;//定义pt 为指向Time类对像的指针变量
Time t1;//定义t1为Time类对像
pt= &t1;//将t1的起始地址赋给pt
void (*p)();  //p是指向函数的指针的指针变量
  • 指向成员函数的指针变量的定义
    (1)数据类型名 (类名::*指针变量名)();
    (2)使指针变量指向一个公用成员函数的一般形式为:指针变量名=&类名::成员函数名;
    即为,该指针指向成员函数的首地址。

  • 注意:对象指针在使用之前,也一定要先进行初始化,让它指向一个已经声明过的对象,然后再使用。通过对象指针,可以访问到所指向对象的公有成员。

3、对象指针访问成员数据和成员函数

//*p为已经定义的Time类对象指针
(*pt).hour      //pt所指向的对象中的hour成员,即t1.hour
// pt把指向的对象中的get_time函数,即t1.get_time()
pt->get_time()    //方法1
(*pt).get_time()  //方法2

4、对象指针练习代码

#include <iostream>
using namespace std;//定义类Time
class Time
{public:Time(int, int, int);  //声明构造函数int hour;  //声明3个共有变量 int minute;int sec; void show_time();  //声明共有成员函数
};//定义类Time的构造函数
Time::Time(int h, int m, int s)
{hour= h;  //用传入的参数来对共有成员数据进行初始化 minute= m;sec= s;
} //定义共有成员函数
void Time::show_time()
{cout << hour << ":"  << minute << ":" << sec << endl;
}int main()
{Time t1(12, 23, 34);  //由Time类实例化对象t1int *p1= &t1.hour;  //定义指向整型数据的指针p1,指向t1对象的共有成员数据hourcout << "指针p1指向地址中存有:" << *p1 << endl;  //输出p1指向地址中存放的数据 t1.show_time();  //调用对象t1的共有成员函数//对象指针 Time *p2= &t1;  //定义对象指针p2,指向对象t1的首地址 p2->show_time();  //调用指针p2指向对象地址的成员函数//对象函数指针:指向对象函数的指针 void(Time::*p3)();  //定义指向Time类共有成员函数的指针变量p3p3= &Time::show_time;  //使p3指向Time类共有成员函数show_time,不能加括号,否则就是调用了  (t1.*p3)();  //调用对象t1中p3所指的成员函数,即t1.show_time()return 0;
}

C++对象数组与对象指针的用法【C++初学面向对象编程】相关推荐

  1. C++的对象数组、对象指针是什么?【案例解析】

    文章目录 一.对象数组(盛放对象的数组) 二.对象指针(指向对象的指针) 一.对象数组(盛放对象的数组) #include <iostream> using namespace std;/ ...

  2. json对象数组按对象属性排序

    //json对象数组按对象属性排序 function JsonSort(obj, field, sortby) {this.obj = obj;this.field = field;this.sort ...

  3. js中对象数组根据对象id分组并转map

    js中对象数组根据对象id分组并转map 如果要将具有相同 id 属性的对象元素,分成不同的数组. 可以先从对象数组中提取相同的 id 属性,再使用 Array.reduce() 和 Map 来进行对 ...

  4. C++对象数组与对象指针

    C++对象数组 1.1数组不仅可以由简单的变量组成,而且还可以由对象组成. 1.2对象数组的初始化: A.如果构造函数只有一个参数,在初始化数组时可以在花括号里提供实参.Student stud[3] ...

  5. java对象数组赋值时空指针问题

    今天学习java对象数组的时候遇到一个问题,在对数组元素赋值的时候出现空指针报错,经过咨询大佬后问题得到解决,现在记录一下 对于引用类型的数组,默认值为null,相当于里面是[null,null],需 ...

  6. C++远征之封装篇——对象数组,对象成员

    一.对象数组 (1)如下,delet [ ]p时,会调用三次析构函数 (2)细节 实例化对象数组时,每一个对象的构造函数都会被执行. 销毁对象数组时,每一个对象的析构函数都会被执行. 二.对象成员 1 ...

  7. vue,js中json对象数组按对象属性排序(sort方法)根据英文首字母进行排序

    for (let i = 0; i < this.tableData.length; i++) {const itemList = this.tableData[i] as any;const ...

  8. python和对象复习_【Python复习巩固 Day4】面向对象编程

    面向对象编程,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数 在Python中,所有数据类型都可以视为对象,当然也可以自定义对象 类和实例 clas ...

  9. C++构造函数的各种用法全面解析(C++初学面向对象编程)

    文章目录 一.构造函数的基本用法 二.带参构造函数与其调用 三.拷贝构造函数 四.构造函数的重载 一.构造函数的基本用法 1.构造函数概念 一个类的对象被创建的时候,编译系统对象分配内存空间,并自动调 ...

最新文章

  1. TensorFlow入门教程
  2. window对象方法之setTimeout(),setInterval()
  3. 拆解19元的儿童电话手表,要是能二次开发就好了
  4. 聊聊高并发(三十五)Java内存模型那些事(三)理解内存屏障
  5. 【渝粤教育】国家开放大学2018年春季 0233-21T学前儿童语言教育 参考试题
  6. 华为交换机telnet和ftp服务开启/关闭命令
  7. JS的 setTimeout 和 bind 使用 、复选框限制选定数据jq
  8. 3.5 数值分析: 例题及迭代法收敛的充分条件
  9. 转载--柯尔莫哥洛夫
  10. openid是什么意思?token是什么意思?
  11. teleop app android,使用yocs_cmd_vel_mux进行机器人速度控制切换
  12. 免疫表位数据库(IEDB)数据下载操作实例
  13. Linux下tomcat重启
  14. trans系列平移距离模型
  15. linux 硬盘对拷,比ghost好用
  16. 雪狐微信小程序商城部署教程(本地+云服务器)
  17. DVWA 之 CSP Bypass
  18. 青少年CTF Misc-Easy 百家姓 WP
  19. MATLAB导出矢量图结合Visio或Adobe illustrator处理图片
  20. ESD测试手法和对应的测试电压及实际案例

热门文章

  1. python的try和except_Python用try except处理程序异常的三种方法总结
  2. uniapp 开发h5 优化加载速度
  3. mysql效率索引_mysql下普通索引和唯一索引的效率对比
  4. c语言time.h时区不对,用C语言修改系统时区,发现一堆问题,请各位大侠不吝赐教。...
  5. java 怎么调用clojure_如何从Java调用Clojure宏?
  6. 使用SpringBoot+JPA报错Incorrect syntax near 'hibernate_sequence'
  7. php v9 邮箱登陆,PHPCMS v9会员登录支持Email登录的实现方法
  8. java eclipse 入门_Eclipse使用入门教程介绍
  9. java静态初始化块无法直接调用,关于JAVA静态初始化块,初始化块,构造器调用顺序的有关问题...
  10. oracle 日期转换成毫秒数,ORACLE:毫秒与日期的相互转换,获取某天的信息