簡體   English   中英

如何在彼此中使用兩個類的實例

[英]How to use instances of two classes in each others

正如標題所述; 想象我有這兩個頭文件:

// a.h
class A {
    A();
    B operator+(A);
}

// b.h
class B {
    B(A);
}

是否有可能使用包含/轉發聲明來完成此工作?

我當然看到了許多相關的問題,但它們通常要么AB包含彼此的實例(這顯然是不可能的),要么可以用指針或引用而不是對象實例來修復。 但是,我仍然希望B的構造函數實際使用A實例,這可能嗎?

是否有可能使用包含/轉發聲明來完成此工作?

確實是。

函數的聲明僅取決於其參數類型和返回的聲明。 它們不依賴於定義。

因此,兩個類都不依賴於另一個類的定義,而只依賴於聲明。 因此,在定義另一個之前,只需向前聲明一個。 BA::operator+確實依賴於B定義而B::B確實取決於A定義,因此必須按正確的順序定義。 必須在類的定義之外定義其中至少一個,以滿足依賴性要求。

  • 定義A

    • 宣布B
    • 定義A
  • 要定義B

    • 宣布A
    • 定義B
  • 定義BA::operator+

    • 以任何順序定義AB
    • 定義BA::operator+
  • 定義B::B

    • 以任何順序定義AB
    • 定義B::B

一個例子:

struct B;
struct A {
    B operator+(A);
};
struct B {
    B(A){}
};
B A::operator+(A) {
    return {*this};
}
int main() {
    A a;
    B b = a+a;
}

暫無
暫無

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

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