簡體   English   中英

如何通過接口從另一個類訪問公共成員變量?

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

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