一、对象数组
因为类本质上也是一种数据类型,所以定义对象数组、使用对象数组的方法与基本数据类型相似,系统为对象数组分配适合的内存空间,以存放数组中的每个对象,同时还为每个对象自动调用匹配的构造函数完成数组内每个对象的初始化工作,但数组结束时会自动调用每个对象的析构函数。
声明对象数组的格式为:
类名 数组名[数组长度];
对象数组通过下标访问具体对象
访问具体对象的数据成员的格式为:数组名[下标].数据成员;//必须有访问权限
访问具体对象的成员函数的格式为:数组名[下标].成员函数(实参列表);//必须有访问权限
数组对象,构造是从0下标开始往后进行,而析构是从后往前进行,还是先构造的后析构,后构造的先析构
class Box //长方体类
{
public:Box(int len = 1, int w = 1, int h = 1) ://声明有默认参数的构造函数length(len), width(w), height(h){cout << "Box构造函数被调用,它的长是:"<< length << endl;}~Box(){cout << "Box析构函数被调用,它的长是:" <<length<< endl;}int volume(); //计算体积
private: int length;//长int width; //宽int height; //高
};int Box::volume() //计算体积
{return(length * width * height);
}int main()
{Box a[3] ={ //定义对象数组¦Box(), //调用构造函数Box,用默认参数初始化第1个元素的数据成员Box(10,15), //调用构造函数Box,提供第2个元素的实参Box(20,30,40) //调用构造函数Box,提供第3个元素的实参};cout << "a[0] 的体积是: " << a[0].volume() << endl;cout << "a[1] 的体积是: " << a[1].volume() << endl;cout << "a[2] 的体积是: " << a[2].volume() << endl;return 0;
}
上图可见数组构造函数和析构函数调用顺序
二、对象指针
在 C++ 中,对象指针的定义和使用与普通指针类似,只是它指向的是一个类的对象。
对象指针在使用之前必须先进行初始化。可以让它指向一个已定义的对象,也可以用new运算符动态建立堆对象。
定义对象指针的格式为:两种都可
类名 *对象指针 = &对象;//用引用
类名 *对象指针 = new 类名(参数);//先使用动态内存创建好
用对象指针访问对象数据成员的格式为:对象指针名->数据成员
用对象指针访问对象成员函数的格式为:对象指针名->成员函数(实参列表);
class Square //正方形
{
private:double length; //边长
public:Square(double len) :length(len)//构造函数{}void show(); //输出函数
};void Square::show()
{cout << "正方形边长:" << length;cout<< ",面积:"<<length * length << endl;
}
int main()
{Square s(2.5);Square *s1 = &s;s1->show();Square* s2 = new Square{ 3.5 }; //动态创建s2->show();delete s2; //释放动态内存return 0;
}
其实一般对象指针的使用没有C++自带容器的使用方便,更推荐使用stl规定好的容器。