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)成员函数指针

  定义成员函数指针时必须确保在三个方面与它所指函数的类型相匹配:

    

原文地址:https://www.cnblogs.com/liuzhenbo/p/11214945.html

时间: 2024-08-16 04:23:52

C++对象数组与对象指针的相关文章

JS中:json对象数组按对象属性排序

var array = [ {name: 'a', phone: 1}, {name: 'b', phone: 5}, {name: 'd', phone: 3}, {name: 'c', phone: 4} ] array.sort(getSortFun('desc', 'phone')); function getSortFun(order, sortBy) { var ordAlpah = (order == 'asc') ? '>' : '<'; var sortFun = new F

【C++】C++自学旅程(9):对象数组和对象指针

耶耶耶,“类”的收官之作! 一.对象数组 对象数组:数组的每一个元素都是一个对象.定义方法: //类名 数组名[长度]; Elec a[2]; 其他跟类的对象.数组元素的使用没有区别.那么数组该怎么初始化呢: //使用构造函数 Elec a[2]= { Elet(111,"ds"...), Elct(154,"fish"...) }; //若对象只有一个参数 Elct a[2]={"ds","fish"}; 二.对象指针 1.

JS对象/数组/识别对象数组

一.对象: 1.对象创建: (1) var obj={}; (2) var obj= new Object();  obj.name="Wang",obj.age=12 (3) Object.create({}); 2.对象访问: (1) obj.a; (2) obj[a];  //a可以是相同的字符串,和数组: 3.对象方法: (1) obj.hasOwnPrototype("prop");    判断对象是否为自身,返回true:如为继承属性,false: (2

js 对象数组根据对象中的属性排序

function createComparisonFunction(propertyName){ return function(object1,object2){ var value1 = object1[propertyName]; var value2 = object2[propertyName]; if(value1 < value2){ return -1; }else if(value1 > value2){ return 1; }else{ return 0; } }; };

js对象数组操作之一:对象数组中对象去重的方法总结

在日常开发业务中,经常会有一个数组由多个对象构成,需要对这种数据结构进行操作,如下: const arr = [ { name:'tom', age:15 }, { name:'jack', age:18 }, { name:'tom', age:10 }, ...] 今天总结了一下 先说这种数据结构的去重方法,对于数组中的多个对象去除重复,需要设置布尔值来进行. 一.jquery方法 var oldArr = [ { name:'tom', age:15 }, { name:'jack', a

js 对象数组和对象的使用

数组 var arr = new Array(); //或者 var arr = []; //或者 var arr = [{index:'0'},{address:'1'}]; var obj_1 = { index:'1', index:'2'}; var obj_2 = { index:'3', index:'3'}; arr.push(obj_1,obj_2); //添加 var pop_data = arr.pop(); //删除并返回数组的最后一个元素. //遍历 for(var i=

js实现的对象数组根据对象的键值进行排序代码

有时候会遇到做展示数组的排序,由大到小和由小到大的切换: var arr=[{id:1,webName:"蚂蚁部落"},{id:2,webName:"网易"}]; function done(key,desc) {   return function(a,b){     //return desc ? ~~(parseInt(a[key]) < parseInt(b[key])) : ~~(parseInt(a[key]) > parseInt(b[ke

后台返回对象数组,对象属性相同时,只取一个对象

后台返回的数据: [ {confirmCharge: "0.00", orderId: "--", changeId: "1", realName: "王五", totalConfirmCharge: "0.00",-}, {confirmCharge: "0.00", orderId: "288783482594267136", changeId: "&q

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

var staffs=[{name:"join",age:20},{name:"ajax",age:21},{name:"trim",age:22}]; function compare(property){ return function(obj1,obj2){ var value1=obj1[property]; var value2=obj2[property] return value1-value2; } } var newStaffs