[英]How to use instances of two classes in each others
正如標題所述; 想象我有這兩個頭文件:
// a.h
class A {
A();
B operator+(A);
}
和
// b.h
class B {
B(A);
}
是否有可能使用包含/轉發聲明來完成此工作?
我當然看到了許多相關的問題,但它們通常要么A
和B
包含彼此的實例(這顯然是不可能的),要么可以用指針或引用而不是對象實例來修復。 但是,我仍然希望B
的構造函數實際使用A
實例,這可能嗎?
是否有可能使用包含/轉發聲明來完成此工作?
確實是。
函數的聲明僅取決於其參數類型和返回的聲明。 它們不依賴於定義。
因此,兩個類都不依賴於另一個類的定義,而只依賴於聲明。 因此,在定義另一個之前,只需向前聲明一個。 BA::operator+
確實依賴於B
定義而B::B
確實取決於A
定義,因此必須按正確的順序定義。 必須在類的定義之外定義其中至少一個,以滿足依賴性要求。
定義A
:
B
A
要定義B
:
A
B
定義BA::operator+
A
和B
BA::operator+
定義B::B
A
和B
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.