zoukankan      html  css  js  c++  java
  • C++ 对象数组

    对象数组是什么

    数组对象就是大批量实例化对象的一种方法,以往我们都是这样:Student stu 实例化对象,如果有好几百个对象应该怎么办?这时候就用到了对象数组,顾名思义,就是吧所有要实例化的对象都放到一个组里面,然后直接实例化这个组,就像这样:Student stu[100] 这样一次性实例化100个对象。stu[1] 这就是对象数组里面的一个对象,stu[1].m_iX = 10 这就是给对象的属性进行定义。

    访问数组中成员的方式

    代码示例:

    int main()
    {
        Student stu[3]; // 通过栈的方式实例化对象数组
        stu[1].m_iX = 10; // 给对象数组里面的第二个对象赋值
        Student *p = new Student[3]; // 通过堆的方式实例化对象数组
        p[0].m_iY = 20;  // 给数组对象里面的一个对象p[0]添加属性 m_iY
        p->m_iY = 20;
        delete []p;
        p = NULL;
    
        system("pause");
    }

    代码演示:

    注释非常详细,看代码吧

    #include<iostream>
    #include<stdlib.h>
    #include"Coordinate.h"
    using namespace std;
    
    /********************************************************
    对象数组
    要求:
        定义Coordinate类
        数据成员:m_iX和m_iY
        分别从栈和堆中实例化长度为3的对象数组
        给数组各元素赋值
        遍历两个数组
    
    *********************************************************/
    
    class Coordinate
    {
    public:
        Coordinate();
        ~Coordinate();
    public:
        int m_iX; // 横坐标
        int m_iY; // 纵坐标
    };
    
    Coordinate::Coordinate()
    {
        cout<<"构造函数"<<endl;
    }
    Coordinate::~Coordinate()
    {
        cout<<"析构函数"<<endl;
    }
    
    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往前移动了一个元素,所以现在的p[0]是第二个元素
    
        p[1].m_iX = 15;  // 因为p往前移动了一个元素,所以现在的p[1]是第三个元素
        p++;  // p指针再往前移动一个位置,到达第二个位置
        p->m_iY = 17;
    
        // 遍历第一个数组
        int i,j;
        for(i=0;i<3;i++)
        {
            cout<<"横坐标:"<<coor[i].m_iX<<endl;
            cout<<"纵坐标:"<<coor[i].m_iY<<endl;
        }
        // 遍历第一个数组
        for(j=0;j<3;j++)
        {
            cout<<"p_x "<<p->m_iX<<endl;
            cout<<"p_y "<<p->m_iY<<endl;
            p--; // 因为通过两次p++,此时p的位置已经是在对象数组的最后一个,所以要用p--,反方向遍历
        }
    
        // 释放内存
        // 因为上面p-- 执行了3次所以此时p的位置并不在对象数组的第一位,而在其前一位,
        // 所以要将p往前移动一位,再去释放内存。
        p++;  
        delete []p;
       p = NULL; system(
    "pause"); return 0; }

    运行结果:

  • 相关阅读:
    借鉴文章记录
    三方框架
    常用第三方库记录
    ios block 类型
    ios runtime部分事例方法说明
    ios url网址相关问题解说
    mysql迁移数据库函数中的坑
    mysql的事务隔离级别
    MySQL数据库的默认隔离级别为什么是可重复读
    实时查看mysql连接数
  • 原文地址:https://www.cnblogs.com/chuijingjing/p/9252872.html
Copyright © 2011-2022 走看看