簡體   English   中英

如何訪問 object(也是該類的成員)中的 class 成員變量

[英]How to access a class member variable in an object (which is also a member of the class)

您好我想完成以下任務。 我可以在 Lower class 中創建一個構造函數,它采用 Upper 的 object,在 Upper 中,我可以將自己的引用傳遞給 lower,但這會產生循環依賴錯誤。

有人可以幫我解決這個問題嗎?

#include<iostream>

using namespace std;

class Lower {
  public:
    void doSomething() {
      // Do something with the data variable of the Upper class
      cout << data << endl;
    }
    Lower();
};

class Upper {
  public:
    int data;
    Lower lower; // object of Lower class
    Upper() : data(0), lower() {}
};


int main(void) {

  Upper upper();
  return 0;

}

可以將自己的引用傳遞給lower,但這會產生循環依賴錯誤。

如果您轉發聲明Upper並將doSomething的定義移到Upper的定義之后,則不會,如下所示:

#include <iostream>

class Upper; // forward declaration

class Lower {
  public:
    // declaration only, reference to incomplete type is allowed
    void doSomething(Upper &upper); 
};

// Definition of Upper
class Upper { 
  public:
    int data;
    Lower lower; // object of Lower class
    Upper() : data(0), lower() {}
    
    void doSomething()
    {
        this->lower.doSomething(*this);
    }
};

// now the definition, here Upper is a complete type
void Lower::doSomething(Upper &upper) 
{
      // Do something with the data variable of the Upper class
      std::cout << upper.data << std::endl;
}

int main(void) {

  Upper upper;
  
  upper.doSomething(); // prints 0
}

不確定你是否想這樣使用它,但它應該展示這個想法。

Lower::doSomething應該處理哪個Upper實例? 你可以有一個沒有Upper實例的Lower實例,然后呢?

如果您需要訪問Upper ,您應該有一個指針或引用。

class Upper;

class Lower {
  Upper * upper;
  public:
    void doSomething() {
      std::cout << upper->data << std::endl;
      std::cout << data << std::endl;
    }
    Lower(Upper * upper) : upper(upper) {}
};

class Upper {
  public:
    int data;
    Lower lower; // object of Lower class
    Upper() : data(0), lower(this) {}
};

暫無
暫無

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

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