![](/img/trans.png)
[英]How do I access to private member variable from another class whose member variable is instance of first class?
[英]How to access a public member variable from another class thru an interface?
鑒於我有這些類,Bclass的成員函數如何訪問Aclass的成員變量。
class Aclass : IAclass {
public:
int x1;
}
class IAclass { //IA is interface of A
}
class Bclass {
private
IAclass * a[5];
void Bfunction(){ a[1]->x1;}
}
我試過 a[1]->x1 但我收到錯誤:IAclass 沒有名為 x1 的成員。
謝謝你。
從 BClass,您不能訪問任何未在 IAClass 中定義的內容。 恕我直言,這就是擁有接口的全部意義,即將實現細節與接口分開。
你的代碼沒有反映你的意願。 你想讓 Aclass 實現 IAclass,但這里沒有繼承。
class IAclass { }
class Aclass : public IAclass {
public:
int x1;
}
其次,你的編譯器是對的。 IAclass 沒有x1
成員。 “動物”有“尾巴”屬性嗎? 不一定。 “蠕蟲”沒有尾巴。 “貓”有尾巴。 如果所謂的“動物”是“貓” - 我們首先需要將動物視為貓,而不是訪問它的尾巴。 您需要將指針向下轉換(向下轉換)到正確的子類,然后訪問變量:
Aclass* pA = (Aclass*)&a[1];
pA->x1;
當然,這里推薦使用dynamic_cast
來實際檢查向下轉換:
Aclass* pA = dynamic_cast<Aclass*>(&a[1]);
if (pA) {
pA->x1;
}
dynamic_cast
將在運行時檢查向下轉換,如果向下轉換失敗,將返回nullptr
。
該成員在Aclass
,這不是Bclass
看到的: Bfunction
只看到一個IAclass
。
所以你必須讓x1
成為IAclass
的公共成員,或者給Bclass
實際的Aclass
對象。
順便說一句:更喜歡使用std::vector
而不是數組,也更喜歡使用shared_ptr<IAclass>
而不是原始指針。 將為您節省大量內存泄漏!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.