發新話題

C++ Gossip - 物件基礎《封裝》物件指標

C++ Gossip - 物件基礎《封裝》物件指標

這個主題延續 訪客無法瀏覽此圖片或連結,請先 註冊登入會員 的範例,主要在main()函式的不同,先列出這個部份的程式碼:
  • main.cpp
#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)};


由於陣列名稱擁有指標的運算特性,當您對物件指標加一或減一時,它會位移一個物件的記憶體單位,例如下面這個程式中,您使用物件指標來存取陣列元件內容:
  • main.cpp
#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

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。