对象数组和对象指针数组
老师真的说过,对象跟变量一样。所以就有对象数组,数组中每个元素都是同一个类的对象。对象数组可以是一维的,二维的或者多维的,一切都与普通数组类似。指向对象的指针也可以组成数组,数组中每个元素都是一个指针,这些指针指向同一个类的对象。这种数组就叫做对象指针数组。
指向对象数组的指针
是一种特殊的指向数组的指针,特殊在该数组的元素都是同一个类的对象。其余都与基础课程中学校的指向数组的指针相同。这里不再赘述。
无名对象
顾名思义,无名对象就是没有名字的对象。当给一个对象数组初始化的时候,需要用到无名对象。也可以用无名对象给已有的对象赋值。无名对象还可以作为实参。总之,需要用到一个对象的值,但有不关心这个对象叫什么名字时,可以用无名对象。
临时对象
拷贝构造函数的作用是用一个已有的对象的值创建一个新的对象。拷贝构造函数一般会被自动调用,例如,当对象作为实参时,系统自动调用拷贝构造函数,用实参对象的值创建形参对象。这里的实参可以是我们刚说的无名对象。再如,函数返回值是一个对象,系统会自动调用拷贝构造函数创建一个临时的无名对象,程序再将这个临时对象赋值为接收返回值的对象。
#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的最大值。