C++编程入门(二) 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

对象数组和对象指针数组

老师真的说过,对象跟变量一样。所以就有对象数组,数组中每个元素都是同一个类的对象。对象数组可以是一维的,二维的或者多维的,一切都与普通数组类似。指向对象的指针也可以组成数组,数组中每个元素都是一个指针,这些指针指向同一个类的对象。这种数组就叫做对象指针数组。

指向对象数组的指针

是一种特殊的指向数组的指针,特殊在该数组的元素都是同一个类的对象。其余都与基础课程中学校的指向数组的指针相同。这里不再赘述。

无名对象

顾名思义,无名对象就是没有名字的对象。当给一个对象数组初始化的时候,需要用到无名对象。也可以用无名对象给已有的对象赋值。无名对象还可以作为实参。总之,需要用到一个对象的值,但有不关心这个对象叫什么名字时,可以用无名对象。

临时对象

拷贝构造函数的作用是用一个已有的对象的值创建一个新的对象。拷贝构造函数一般会被自动调用,例如,当对象作为实参时,系统自动调用拷贝构造函数,用实参对象的值创建形参对象。这里的实参可以是我们刚说的无名对象。再如,函数返回值是一个对象,系统会自动调用拷贝构造函数创建一个临时的无名对象,程序再将这个临时对象赋值为接收返回值的对象。

#include <iostream>
using namespace std;
class L
{
    public:
        L(int x){a=x;}
        void incr(int y){a+=y;}
        void Print(){cout<<"a= "<<a<<endl;}
    private:
        int a;
};
L func()
{
    L temp(3);
    return temp;    //
}
void main()
{
    L l1[3]={L(1),L(2),L(3)}, *l2[1],L3[2];
    L l(4); 
    l2[0]=&l;
    L3[0]=L(5);
    L3[1]=func();
}

主函数体的第一行,创建对象数组L1,L1用三个无名对象初始化。然后创建对象指针数组L2,L2有1个元素,这个元素是指向L类的对象的指针。创建对象数组L3,L3没有初始化。

main函数体的第2行,创建类L的对象l,并在下一行将l的地址赋值给L2的第0个元素。

main函数体的第4行,用无名对象给L3的第0个元素赋值。

函数func中创建对象temp,执行到return temp;时,系统自动调用拷贝构造函数,用temp的值创建一个临时的无名对象。从func返回后,将该临时的无名对象的值赋值给L3的第1个元素。

在右侧代码框中编写程序:根据上述例子,写一个类A,只有数据成员a。再写一个函数func,参数为对象数组,功能为返回数组中a的最大值。