C++对象数组与对象指针
(一)对象数组
将具有相同类类型的对象有序地集合在一起便构成了对象数组,以一维对象数组为例,其定义形式为:
类名 对象数组名[];
Point points[100];
关于对象数组的几点说明:
(1)在建立对象数组的时候需要调用构造函数。如果对象数组有100个元素,就需要调用100次构造函数。
(2)如果对象数组所属类有带参数的构造函数时,可用初始化列表按顺序调用构造函数,使用复制初始化来初始化每个数组元素。
Point A[3]={Point(0,0),Point(1,1),Point(2,2)}; //Point(int a=0,int b=0)
Point A[3]={Point(1),Point(2),Point(3)}; //Point(int a=0,int b=0)
(3)如果对象数组所属类有单个参数的构造函数时候,定义数组时可以直接在初值列表中提供实参。
Point A[3] ={1,2,3}; //Point(int a=0,int b=0)
等价与:
Point A[3]={Point(1),Point(2),Point(3)};
(4)如果对象数组在创建时没有初始化,则所属类要么有合成默认构造函数,要么定义无参数的构造函数或全部参数为默认参数的构造函数。
(5)对象数组的初始化形式本质上取决于所属类的构造函数,需要清晰初始化实参与构造函数形参的对应关系,避免出现歧义性。
(6)如果对象数组所属类含有析构函数,那么每当建立对象数组时,按照每个元素的排列顺序调用构造函数;每当撤销数组时,按照相反的顺序调用析构函数。
(二)对象指针
1)指向对象的指针
在建立对象时,编译器会为每一个对象分配一定的存储空间,以存放其成员。对象内存单元的起始位置地址就是对象的指针。可以定义一个指针变量,用来存放对象的指针。指向类对象的指针变量的定义形式为:
类名* 对象指针变量名=初值;
例子:
Point one(0,0),*p; //p为指向对象的指针变量
p=&one; //指向对象
2)类成员指针
成员对象要占用存储空间,因此也有地址。指向对象成员的指针变量,一般形式为:
数据成员类型* 指针变量名=初值;
注意,C++比C语言有着更加严格的静态类型,更加强调类型安全与编译时检查。因此,C++指针被分为数据指针,函数指针,数据成员指针,成员函数指针四种,而且不能随意转换。其中前两种是C语言的称为普通指针;后两种是C++专门为类扩展的,称为成员指针。
成员指针与类的类型和成员的类型相关,它只应用于类的非静态成员。由于静态成员不是任何对象的组成部分,所以静态成员指针可用普通指针。
a)数据成员指针
数据成员类型是 类名::*指针变量名=成员地址初值;
b)成员函数指针
定义成员函数指针时必须确保在三个方面与它所指函数的类型相匹配:
C++对象数组与对象指针的更多相关文章
- C++二维数组、指针、对象数组、对象指针
项目中用到,随手记一下: 1.二维数组.与指针 创建二维数组指针的方式: a.已知一维的大小 1 int **array=new int *[rows]; 2 (for int i=0;i<ro ...
- C++_对象数组与对象指针
对象数组与对象指针 1. 对象数组 所谓对象数组是指每一数组元素都是对象的数组, 也就是说,若一个类有若干个对象,则把这一系列的对象用一个数组来存放. 对象数组的元素是对象, 不仅具有数据成员,而且还 ...
- JavaSE基础知识(5)—面向对象(对象数组和对象关联)
一.对象数组 1.说明 数组的定义类型为对象类型 2.动态初始化 1.声明并开辟空间 Person[] pers = new Person[长度];2.赋值 for(int i=0;i<pers ...
- vue的v-for循环普通数组、对象数组、对象、数字
如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...
- 对象数组和对象对象数组的for-each循环
对象数组的声明 类名称 对象数组名[] = null: 对象数组名 = new 类名称[长度] 定义并开辟数组 类名称 对象数据名[] = new 类名称[长度]; 在声明一个对象数组后,必须对每个数 ...
- json对象数组按对象属性排序
var array = [ {name: 'a', phone: 1, value: 'val_4'}, {name: 'b', phone: 5, value: 'val_3'}, {name: ' ...
- js 对象数组根据对象中的属性排序
function createComparisonFunction(propertyName){ return function(object1,object2){ var value1 = obje ...
- js实现的对象数组根据对象的键值进行排序代码
有时候会遇到做展示数组的排序,由大到小和由小到大的切换: var arr=[{id:1,webName:"蚂蚁部落"},{id:2,webName:"网易"}] ...
- js中json对象数组按对象属性排序---1
转载:https://www.cnblogs.com/jasonwang2y60/p/6656103.html 在实际工作经常会出现这样一个问题:后台返回一个数组中有i个json数据,需要我们根据js ...
随机推荐
- BZOJ 2744
#include<iostream> #include<cstdio> #include<cstring> #include<vector> #incl ...
- Oracle 新建用户、赋予权限
1.新建用户 新建用户: create User username Identified by password 修改用户密码: alter User username Identified by p ...
- 三十一、SAP中的循环和判断图标和表格的混用
一.代码如下 二.显示结果如下
- border-radius 在 浏览器开发者工具移动端里是有效的,在真机是无效的。
border-radius 在 浏览器开发者工具移动端里是有效的,在真机是无效的,怎么解决? 答案是 border-radius:20px !important 加上!important 就好了.
- taro编译的时候报 exports.pRimraf = util_1.promisify(rimraf); 错误
C:\Users\1\AppData\Roaming\npm\node_modules\@tarojs\cli\dist\h5\helper.js:8 exports.pRimraf = util_1 ...
- PHP常用的数学函数和字符串函数
PHP常用函数总结 数学函数 1.abs(): 求绝对值 $abs = abs(-4.2); //4.2 数字绝对值数字 2.ceil(): 进一法取整 echo ceil(9.999); // 10 ...
- java课程课后作业190606之计算最长英语单词链
一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只能用一次.最长的定义是:最多单词数量,和单词中字母的数量无关. 统一输入文件名称:inp ...
- SpringBoot之Order注解启动顺序
order的规则: order的值越小,优先级越高order如果不标注数字,默认最低优先级,因为其默认值是int最大值该注解等同于实现Ordered接口getOrder方法,并返回数字. @Reten ...
- php语言注意点
PHP大小写问题 http://www.jb51.net/article/38579.htm 推荐大家始终坚持“大小写敏感”,遵循统一的代码规范.1. 变量名区分大小写 2. 函数名.方法名.类名不区 ...
- js动态删除行错误
Uncaught TypeError: Failed to execute 'removeChild' on 'Node': parameter 1 is not of type 'Node'. js ...