首先创建一个类,如下:
class Coordinate
{
public:
int m_iX;
int m_iY;
};
下面就是实例化一个对象。
void main()
{
Coordinate coord[3]; //栈上
coord[1].m_iX=10;
Coordinate *p=new Coordinate[3]; //堆中
p[0].m_iX=10;
p->m_iX=10;
delete []p;
p=NULL;
}
1.在栈上实例化一个对象数组
Coordinate coord[3],类名+数组的名称+数组的大小,创建完成后每一个数组元素都可以访问各自的成员,例如用coord[1]来访问数组的第二个元素,后面接点号来访问数据成员,形如coord[1].m_iX=10。这里使用完后内存是自动销毁的。
2.在堆中实例化一个对象数组
Coordinate *p=new Coordinate[3],用一个指针指向一段内存,开辟内存用new运算符,这里数组大小为3,则创建时会调用三次构造函数。创建完成后每一个数组元素都可以访问各自的成员,例如p[0].m_iX=10是通过指针接一个索引再加点号和数据成员访问的,也可以通过p->m_iX=10来进行赋值。在这里使用完后,必须要通过delete来销毁这个对象数组,由于是一个对象数组,所以在销毁的时候是调用了多次析构函数的。
如下图:
证明构造函数和析构函数被多次调用
Coordinate.h
#ifndef COORDIANTE
#define COORDIANTE
class Coordinate
{
public:
Coordinate();
~Coordinate();
};
#endif
Coordinate.cpp
#include<iostream>
#include"Coordinate.h"
using namespace std;
Coordinate::Coordinate()
{
cout<<"Coordinate()"<<endl;
}
Coordinate::~Coordinate()
{
cout<<"~Coordinate()"<<endl;
}
mian.cpp
#include<iostream>
#include "Coordinate.h"
using namespace std;
void main()
{
Coordinate coor[3];
Coordinate *p=new Coordinate[3];
delete []p;
p=NULL;
system("pause");
}