[C++之旅] 14 对象成员与对象数组
对象数组
使用方式
-
从栈中实例化对象数组
类名 对象名[对象个数]; 对象名[需访问的第几个对象 - 1].成员/成员函数...
对象数组中有n个对象则实例化时调用n次构造函数
-
从堆中实例化对象数组
类名 *对象名 = new 类名[对象个数]; 对象名[需访问的第几个对象 - 1].成员/成员函数... 对象名->对象成员/成员函数... delete []对象名; 对象名 = NULL;
对象数组中有n个对象则实例化时调用n次构造函数,delete时调用n次析构函数,采用指针的方式访问成员时,即
类名 p = new 类名[n]
,p->成员和p[0].成员,表示对象数组中第一个对象的成员,(p+1)->成员,表示对象数组中第二个对象的成员,以此类推,但如果执行了p+=1(此时p已经改变,而p+1则不改变p的值);则p[0]指向的是对象数组的第二元素。对象成员
即对象中包含有其他的对象
class Coordinate { public: Coordinate(int x, int y): m_x(x), m_y(y){} private: int m_x; int m_y; };
Coordinate表示点的类,其中包含点的xy坐标
class Line { public: Line(int x1, int y1, int x2, int y2): m_coorA(x1, y1), m_coorB(x2, y2){} private: Coordinate m_coorA; Coordinate m_coorB; };
Line表示线的类,包含两个点的类,即包含AB两个坐标点
int main(void) { Line *p = new Line(1, 2, 4, 5); delete p; p = NUll; return 0; }
实例化对象时,先实例化m_coorA这个对象再实例化m_coorB这个对象,再实例化p这个对象。销毁时,先销毁p再销毁m_coorB再销毁m_coorA。