1. 程式人生 > >C++中類的例項化的兩種方法

C++中類的例項化的兩種方法

       首先建立一個類,如下:

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");
}