這個主題延續
訪客無法瀏覽此圖片或連結,請先 註冊 或 登入會員 。 的範例,主要在main()函式的不同,先列出這個部份的程式碼:
#include <iostream>
#include "SafeArray.h"
using namespace std;
int main() {
SafeArray *safeArray = new SafeArray(10);
for(int i = 0; i < safeArray->length; i++) {
safeArray->set(i, (i + 1) * 10);
}
for(int i = 0; i < safeArray->length; i++) {
cout << safeArray->get(i) << " ";
}
cout << endl;
delete safeArray;
return 0;
}執行結果:
10 20 30 40 50 60 70 80 90 100 |
在這個程式中,您使用new來動態配置物件,new會傳回物件的記憶體空間位址,所以您必須使用「物件指標」來記錄這個位址,物件指標與變數的指標類似,只要使用類別名稱加上*運算子即可宣告物件指標。
要使用物件指標存取物件成員時,並不是使用「.」運算子,而是使用「->」運算子,就如您在程式中所看到的。
由於您是使用new來配置物件,所以必須使用delete來清除物件所配置到的記憶體空間,當物件被清除時,會執行其解構函式。
類別其實就是您自行定義的資料型態,所以它也可以如同C++內建的資料型態一樣進行陣列的建立,例如:
SafeArray arrs[] = {SafeArray(5), SafeArray(10), SafeArray(15)};
由於陣列名稱擁有指標的運算特性,當您對物件指標加一或減一時,它會位移一個物件的記憶體單位,例如下面這個程式中,您使用物件指標來存取陣列元件內容:
#include <iostream>
#include "SafeArray.h"
using namespace std;
int main() {
SafeArray arrs[] = {SafeArray(5), SafeArray(10), SafeArray(15)};
for(int i = 0; i < 3; i++) {
SafeArray *safeArray = arrs + i;
for(int j = 0; j < safeArray->length; j++) {
safeArray->set(j, (j + 1) * 10);
}
}
for(int i = 0; i < 3; i++) {
SafeArray *safeArray = arrs + i;
for(int j = 0; j < safeArray->length; j++) {
cout << safeArray->get(j) << " ";
}
cout << endl;
}
system("pause");
return 0;
}
執行結果:
10 20 30 40 50
10 20 30 40 50 60 70 80 90 100
10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 |