C++对象数组与对象指针的用法【C++初学面向对象编程】
文章目录
- 一、对象数组
- 二、对象指针
一、对象数组
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++初学面向对象编程】相关推荐
- C++的对象数组、对象指针是什么?【案例解析】
文章目录 一.对象数组(盛放对象的数组) 二.对象指针(指向对象的指针) 一.对象数组(盛放对象的数组) #include <iostream> using namespace std;/ ...
- json对象数组按对象属性排序
//json对象数组按对象属性排序 function JsonSort(obj, field, sortby) {this.obj = obj;this.field = field;this.sort ...
- js中对象数组根据对象id分组并转map
js中对象数组根据对象id分组并转map 如果要将具有相同 id 属性的对象元素,分成不同的数组. 可以先从对象数组中提取相同的 id 属性,再使用 Array.reduce() 和 Map 来进行对 ...
- C++对象数组与对象指针
C++对象数组 1.1数组不仅可以由简单的变量组成,而且还可以由对象组成. 1.2对象数组的初始化: A.如果构造函数只有一个参数,在初始化数组时可以在花括号里提供实参.Student stud[3] ...
- java对象数组赋值时空指针问题
今天学习java对象数组的时候遇到一个问题,在对数组元素赋值的时候出现空指针报错,经过咨询大佬后问题得到解决,现在记录一下 对于引用类型的数组,默认值为null,相当于里面是[null,null],需 ...
- C++远征之封装篇——对象数组,对象成员
一.对象数组 (1)如下,delet [ ]p时,会调用三次析构函数 (2)细节 实例化对象数组时,每一个对象的构造函数都会被执行. 销毁对象数组时,每一个对象的析构函数都会被执行. 二.对象成员 1 ...
- vue,js中json对象数组按对象属性排序(sort方法)根据英文首字母进行排序
for (let i = 0; i < this.tableData.length; i++) {const itemList = this.tableData[i] as any;const ...
- python和对象复习_【Python复习巩固 Day4】面向对象编程
面向对象编程,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数 在Python中,所有数据类型都可以视为对象,当然也可以自定义对象 类和实例 clas ...
- C++构造函数的各种用法全面解析(C++初学面向对象编程)
文章目录 一.构造函数的基本用法 二.带参构造函数与其调用 三.拷贝构造函数 四.构造函数的重载 一.构造函数的基本用法 1.构造函数概念 一个类的对象被创建的时候,编译系统对象分配内存空间,并自动调 ...
最新文章
- TensorFlow入门教程
- window对象方法之setTimeout(),setInterval()
- 拆解19元的儿童电话手表,要是能二次开发就好了
- 聊聊高并发(三十五)Java内存模型那些事(三)理解内存屏障
- 【渝粤教育】国家开放大学2018年春季 0233-21T学前儿童语言教育 参考试题
- 华为交换机telnet和ftp服务开启/关闭命令
- JS的 setTimeout 和 bind 使用 、复选框限制选定数据jq
- 3.5 数值分析: 例题及迭代法收敛的充分条件
- 转载--柯尔莫哥洛夫
- openid是什么意思?token是什么意思?
- teleop app android,使用yocs_cmd_vel_mux进行机器人速度控制切换
- 免疫表位数据库(IEDB)数据下载操作实例
- Linux下tomcat重启
- trans系列平移距离模型
- linux 硬盘对拷,比ghost好用
- 雪狐微信小程序商城部署教程(本地+云服务器)
- DVWA 之 CSP Bypass
- 青少年CTF Misc-Easy 百家姓 WP
- MATLAB导出矢量图结合Visio或Adobe illustrator处理图片
- ESD测试手法和对应的测试电压及实际案例
热门文章
- python的try和except_Python用try except处理程序异常的三种方法总结
- uniapp 开发h5 优化加载速度
- mysql效率索引_mysql下普通索引和唯一索引的效率对比
- c语言time.h时区不对,用C语言修改系统时区,发现一堆问题,请各位大侠不吝赐教。...
- java 怎么调用clojure_如何从Java调用Clojure宏?
- 使用SpringBoot+JPA报错Incorrect syntax near 'hibernate_sequence'
- php v9 邮箱登陆,PHPCMS v9会员登录支持Email登录的实现方法
- java eclipse 入门_Eclipse使用入门教程介绍
- java静态初始化块无法直接调用,关于JAVA静态初始化块,初始化块,构造器调用顺序的有关问题...
- oracle 日期转换成毫秒数,ORACLE:毫秒与日期的相互转换,获取某天的信息