【C++】类与对象 | 对象数组与对象指针

这篇博客探讨了C++中对象数组的使用,包括如何初始化、访问数组元素以及动态创建和删除对象。示例代码展示了如何使用指针操作单个对象和对象数组,以及如何正确地释放内存。此外,还提到了无参构造函数在未初始化对象时的调用情况。
摘要由CSDN通过智能技术生成

EX1

#include <iostream>
using namespace std;

class point
{
    int x;
    int y;
public:
    point():x(1),y(1){}
    point(int a, int b):x(a),y(b){}
    int getx(){return x;}
    int gety(){return y;}
};

int main()
{
    point* p[2] = {new point(1, 2), new point(3, 4)};
    
    point p1(3,3);
    point p2[3]={{2,2},{3,3},{4,4}};
    point p3[3];
    point* pt = &p1; //指向单个对象的指针
    point* pi = p3;  //指向对象数组的指针

    //访问 对象数组元素
    for (int i=0;i<2;i++)
    {
        cout<<"p["<<i<<"].x="<<p2[i].getx()<<"\t";
        cout<<"p["<<i<<"].y="<<p2[i].gety()<<endl;
    }
    
    //访问 指针对象 case1:pt->getx()
    cout<<"point pt -> x:"<<pt->getx()<<endl;
    //访问 指针对象 case2:(*pt).getx()
    cout<<"point (*pt).x:"<<(*pt).getx()<<endl;
}

EX2

#include "iostream"
using namespace std;

class A
{
    int i;
public:
    A(int k = 0)
    {
        i = k;
    }
    void display()
    {
        cout << "i=" << i << endl;
    }
};

int main()
{
    A *p = new A; //动态创建对象p
    
    p->display();
    delete p;      //删除对象p (清理内存,不是说删除了之后就要重新声明p变量)

	//A *p = new A(8); error 重新声明了
  
    p = new A(8);
    p->display();
    delete p;

    p = new A[3];  //p指向对象数组
    A *q = p;
    for (int i = 0; i < 3; i++)
    {
        (q++)->display(); //输出对象数组数据
    }
    delete[] p;  //删除对象数组指针p,别漏了[]
    return 0;
}

EX3

#include <iostream>
using namespace std;

class Student
{
    int num;
    float score;
public:
    Student(int n, float s) : num(n), score(s) {} //利用参数初始化表进行数据初始化
    void display();
};

void Student::display()
{
    cout << num << " " << score << endl;
}

int main()
{
    Student stud[5] = {
        Student(101, 78.5), Student(102, 85.5), Student(103, 98.5),
        Student(104, 100.0), Student(105, 95.5)}; //定义对象数组

    Student *p = stud; //定义对象指针指向对象数组
    for (int i=0;i<=2;p=p+2,i++)             //显示第1、3、5名学生信息
        p->display();
    return 0;
}

注意

  • 对象数组中的元素必须是同一个类的对象

  • 生成对象数组时,将针对每个数组元素按其下标的排列顺序依次调用一个构造函数。

  • 定义对象数组时可以直接初始化,也可以通过赋值语句进行赋值。

  • 对象数组在定义过程中进行元素初始化时调用有参构造函数;如果只定义而不进行初始化,则调用无参构造函数
    在这里插入图片描述
    没初始化,调用无参构造函数。

  • 对数组元素赋值时(用赋值语句),系统先调用有参构造函数创建无名对象,并将其值赋给响应对象数组元素,最后再调用析构函数将无名释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值