C++中類的例項化的兩種方法
阿新 • • 發佈:2019-02-02
首先建立一個類,如下:
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
Coordinate.cpp#ifndef COORDIANTE #define COORDIANTE class Coordinate { public: Coordinate(); ~Coordinate(); }; #endif
#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"); }