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 ...
随机推荐
- mfc WebBrowser打开本地网页
本地路径要用file协议,例子:file:///c:/abc/def.html注意点:file:后面是3个正斜杠,路径中用正斜杠(不是标准的反斜杠).如果你觉得IE地址栏支持标准的路径写法,那么你就错 ...
- Jenkins实现自动打包,MAVEN打包,Shell脚本启动
1.点击New任务 2.创建任务,输入项目名 3.输入描述等 4.选择Git或SVN 5.自动,定时打包 6.在Build下配置
- nodejs 文件路径问题
fs.stat() 是 获取 本目录下 文件信息 的方法 .如果使用要加上绝对路径.不然会出问题.例: 解决方法
- Mysql 事务隔离级别分析
Mysql默认事务隔离级别是:REPEATABLE-READ --查询当前会话事务隔离级别mysql> select @@tx_isolation; +-----------------+ | ...
- 044-PHP获得多个类对应的反射信息
<?php //获得多个类对应的反射信息 class demo{ public $str_1; private $str_2; protected $str_3; public function ...
- JavaScript使浏览器不使用缓存
方法一: script标签中src链接,或者link标签的href链接,后面加上版本号: <script type='text/javascript' src='//site.com/js.js ...
- 使用apply调用函数
实现函数 calllt,调用之后满足如下条件1.返回的结果为调用fn之后的结果2.fn的调用为calllt的第一个参数之后的全部参数 方法1 使用es6 function calllt(...para ...
- P4147 玉蟾宫(悬线法求最大子矩阵)
P4147 玉蟾宫 悬线法 ,\(l_{i,j},r_{i,j},up_{i,j}\) 分别表示 \((i,j)\) 这个点向左,右,上能到达的远点.然后面积就很好办了.具体实现见代码. 然而,还有更 ...
- 2016蓝桥杯决赛C/C++A组第四题 路径之谜
题意: 小明冒充X星球的骑士,进入了一个奇怪的城堡.城堡里边什么都没有,只有方形石头铺成的地面. 假设城堡地面是 n x n 个方格.[如图1.png]所示. 按习俗,骑士要从西北角走到东南角.可以横 ...
- javascript 解决provisional headers are shown的过程
请求没有被发送,因为是载入缓存资源. 大概是说 完全相同的请求间隔数毫秒(太短),导致加载失败,查看了chrome控制台发现 Provisional headers are shown 出现在 载入缓 ...