簡體   English   中英

如何將一個 class 的私有成員訪問到另一個

[英]how to access private members of one class to another

在下面的代碼中,有兩個類 a 和 b。 我無法解決的錯誤是我無法使用 a 類型的指針 ptr 訪問 class b 中的名稱和時間。 我知道還有其他方法可以使用 getter 或結交朋友 function 來訪問它們,但這是我任務的一部分,所以我被指示這樣做。 為方便起見,我注釋了顯示錯誤的行。 如果有人幫助我解決這個問題,那將是一個很大的幫助。

class a{
private:
    char name[12];
    char time[12];
public:
    a(){
        strcpy(name,"");
        strcpy(time,"");
    }
    void set(char *n,char *t){
        for(int i=0;n[i]!='\0' && i<12;i++){
            name[i] = n[i];
        
        }
        for(int i=0;n[i]!='\0' && i<12;i++){
            time[i] = t[i];
        
        }
    
    }
    
};


class b{
private:
    a *ptr;
    static int index;
public:
    b(){
        ptr= new a[2];
    }
    b(int size){
        index=size;
        ptr = new a[index];
    
    }
    void show(){
        for(int i=0;i<index;i++){
            cout << ptr[i].name << ", " << ptr[i].time << endl; // Error
            
        }
    }
};

私有成員只能在其 class 或 getter 中訪問。
此外,您可以使這些成員受保護或公開以成功訪問它們。

您可以查看此參考以獲得更多理解。

好吧,因為這兩個字段在 A 中都是私有的,在這種情況下,如果沒有 getter 或將它們設為公共,您將無法訪問它們正如評論所指出的,如果字段受到保護,您可以讓 B 繼承表單 A

無法編輯原A class的外籍班的兩種解決方案:

A) 使用指針算法訪問私有變量:創建A的動態object並將指針移動到私有變量地址的偏移量,然后讀取適當的大小。

B) 實現一個類似於 A 的 class 並在末尾添加吸氣劑:創建一個具有完全相同實現的 class (A1),但將吸氣劑添加到末尾。 然后創建一個A的動態object並強制轉換為A1。

A a;
A1* a1 = reinterpret_cast<A1*>(&a);

然后您可以使用 getter 訪問原始的 A 私有變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM