[英]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.