对象数组

---------------siwuxie095

对象数组

对于程序来说,实例化对象非常重要,只有先实例化对象,才能通过

这个对象访问相关的数据成员和成员函数

但是在很多场合下,一个对象是远远不够用的,往往需要一组对象

「某些情况下需要一组对象」

如:想表示一个班的学生,假如这个班的学生一共有 50 人,如果还

使用简单的对象实例化,就要定义 50 个变量来表示这 50 个学生

显然,这样做是很愚蠢的,需要通过数组来表达这一个班的学生

再如:如果需要定义一个坐标,一个坐标只能代表一个点,如果要定义

一个矩形,就可以定义四个点,四个点的连线形成一个矩形,这四个点

也可以定义成一个数组

定义一个坐标类:

在使用时:

(1)可以从栈上实例化一个对象数组,如:Coordinate coord[3];

(2)可以从堆上实例化一个对象数组,如:Coordinate *p=new Coordinate[3];

即共调用 6 次构造函数,6 次析构函数

在内存中的工作方式:

当从栈区实例化一个数组时,即:Coordinate coord[3];,会从栈区

分配相应的内存,这些内存在使用完成后会被系统自动回收,分配的

内存分别表示为 coord[0]、coord[1]、coord[2],而每一个元素中又

有两个数据成员 m_iX 和 m_iY

当从堆中实例化一个数组时,即:Coordinate *p=new Coordinate[3];,

也会从堆区分配相应的内存,可以使用 p 表示指向的第一个数组元素,或

使用 p[0] 来表示第一个数组元素,后面的元素表示以此类推 … 最后,需要

手动回收这些内存

程序:

Coordinate.h:


class Coordinate

{

public:

Coordinate();

~Coordinate();

public://访问限定符可以多次使用

int m_iX;

int m_iY;

};

Coordinate.cpp:


#include "Coordinate.h"

#include <iostream>

using namespace std;

Coordinate::Coordinate()

{

cout << "Coordinate()" << endl;

}

Coordinate::~Coordinate()

{

cout << "~Coordinate()" << endl;

}

main.cpp:


#include <stdlib.h>

#include "Coordinate.h"

#include <iostream>

using namespace std;

int main(void)

{

Coordinate coor[3];//从栈上实例化

coor[0].m_iX = 3;

coor[0].m_iY = 5;

Coordinate *p = new Coordinate[3];//从堆中实例化

p->m_iX = 7;

p[0].m_iY = 9;

p++;//p=p+1; 或 p+=1;

p->m_iX = 11;

p[0].m_iY = 13;//指针已经变动所以此时是第二个点

//第三个点

p[1].m_iX = 15;

p++;

p->m_iY = 17;

for (int i = 0; i < 3;i++)

{

cout << "coor_x:" << coor[i].m_iX << endl;

cout << "coor_y:" << coor[i].m_iY << endl;

}

//注意此时指针因为有++操作所以是逆序遍历

for (int i = 0; i < 3;i++)

{

cout << "p_x:" << p->m_iX << endl;

cout << "p_y:" << p->m_iY << endl;

p--;

}

//在for循环之后p指针的位置已经不是最开始new出的位置,而是前一个位置

//如果不做++,delete掉的就不是同一段内存,导致出错

p++;

//如果不加中括号那么就只会销毁第一个从堆中实例化的对象

//只调用一次析构函数,内存泄露且调试出错

delete []p;

p = NULL;

system("pause");

return 0;

}

【made by siwuxie095】

时间: 2024-10-07 04:50:49

对象数组的相关文章

集合框架(对象数组的概述和使用)

package cn.itcast_01; public class Student { // 成员变量 private String name; private int age; // 构造方法 public Student() {  super(); } public Student(String name, int age) {  super();  this.name = name;  this.age = age; } // 成员方法 // getXxx()/setXxx() publ

spring接收对象数组实例

JS var param= new Array(); var one= new Object; one.id = '1'; one.name= 'simba1'; param.push(one); var two= new Object; two.id = '2'; two.name= 'simba2'; param.push(two); $.ajax({ async : false, cache : false, type : 'POST', dataType:"json", con

java 对象数组

数组是引用类型,而类同样是引用类型,所以如果是对象数组的话表示一个引用类型里面嵌套其他引用类型. 在前面两篇都是属于基本数据类型的数据,但是索引的引用数据类型也同样可以定义数组,这样的数组称为对象数组. 以类为例定义对象数组: 动态初始化:   //开辟之后对象数组的内容都是默认值,即null值 类名称 对象数组名称 [ ]  = new 类名称 [长度] : 分步完成: 声明对象数组: 类名称 对象数组名称 [ ]  = null ; 开辟对象数组:对象数组名称 = new 类名称 [长度]

ajax传递数组、form表单提交对象数组

在JSP页面开发中,我们常常会用到form表单做数据提交,由于以前一直只是使用form表单提交单个对象,只要表单文本域的name值和接收的对象的属性名一致,那么传值就没有什么问题.不过,在前几天的开发任务中,遇到了需要批量传递对象,也就是需要传递对象数组,在此做个总结.今天又遇到需要向后台传递数组,便一并写下来吧. 1.ajax传递普通数组 前台代码 var deleteNum= [];//定义要传递的数组 deleteNum.push("1"); deleteNum.push(&qu

new对象数组时的内存布局

[cpp] view plain copy #include <iostream> #include <limits> using namespace std; #define SAFE_DELETE(x) \ { \ if (NULL != (x)) \ { \ delete (x); \ (x) = NULL; \ } \ } #define SAFE_DELETE_ARY(x) \ { \ if (NULL != (x)) \ { \ delete[] (x); \ (x) 

struts2绑定对象数组

1.首先写一个要绑定的对象 User.java package com.zjd.getExcel.entity; /** * Created by dong on 15-4-19. */ public class User { public User(){} private Integer id; private String username; private String sex; private String email; private String password; private

学java教程之对象数组

学编程吧学java教程之对象数组发布了,欢迎通过xuebiancheng8.com来访问 什么是对象数组呢,对象数组顾名思义是对象的数组. 首先定义一个对象 public class Student{ private String username; private String password; setter,getter.... } 如上面所示,定义了一个Student对象 加入现在需要3个Student对象怎么办呢,我们得 Student stu1 = new Student(); St

面向对象基础——构造方法私有化、对象数组、内部类

构造方法私有化 类的封装性不光体如今对属性的封装上.实际上方法也是能够被封装的,当然,在方法封装上也包括了对构造方法的封装.比如例如以下代码就是对构造方法封装. class Singleton{ private Singleton(){ // 将构造方法进行了封装,私有化 } public void print(){ System.out.println("Hello World!!!") ; } }; 使用 class Singleton{ private Singleton(){

Java-第十四章-代参的方法(二)-编程实现,输入班里10名学生的身高,获得身高最高的学生要求对象数组类型方法

package com.ww.yzpA; public class Students { int No; int Height; } package com.ww.yzpA; public class Height { public Students getMaxHeigth(Students[] str) { Students A = new Students(); for (int i = 0; i < str.length; i++) { if (str[i].Height > A.He