由於類定義是內部鏈接,我們必須在使用它之前定義一個類。我無法弄清楚使用類聲明的情況,如class A;
。在那兒?什麼時候聲明C++中使用的類?
回答
它用於前向聲明;想象兩個類有一個指針或提及對方的實例:
class A;
class B;
class A {
class B*ptr;
int x;
/// etc
};
class B : A {
std::string s;
std::vector<A> v;
//// etc
};
這對於可讀性也很有用;您可能希望首先在某個標題中列出所有類。
而且你可以直接聲明一個類並簡單地使用它的指針而不用定義該類。
BTW,C99對於struct
,union
具有類似的前向聲明;並且轉發聲明函數也很有用。
這是一個forward declaration,這是一個處理頭文件中循環依賴的方法。
例如,如果兩個類中的每一個都包含一個指向另一個的指針,那麼您需要轉發聲明在翻譯單元中進一步定義的類。
您在詢問是否需要提前申報。
想象一下以下假設的例子:
class Man
{
Woman mySpouse;
};
class Woman
{
Man mySpouse;
};
我們必須明確一個類之前,我們使用它。
是的。所以你可以看到上面的例子,這是不可能的雞蛋情況(又名循環依賴)。這就是爲什麼你需要向前聲明和指針,如下圖所示:
class Man; // Forward declaration
class Woman; // Forward declaration
class Man
{
Woman * pMySpouse;
};
class Woman
{
Man * pMySpouse;
};
由於提前聲明,這應該工作正常。
見這個問題的答案:我什麼時候可以使用預先聲明] When can I use a forward declaration?
只有當指針涉及(也許是間接的),否則(如果'女人'有一個額外的字段),你的班級將有無限大小,這是有道理的 –
@BasileStarynkevitch這正是我的觀點。無論如何,只是編輯我的答案,以便更好地理解。 – vcp
- 1. 什麼時候在C#中使用類?
- 2. 我什麼時候需要聲明session_start();?
- 3. 什麼時候應該使用使用聲明?
- 4. 什麼時候應該在PHP類中聲明變量?
- 5. 什麼時候應該在基類中聲明靜態方法?
- 6. 爲什麼或什麼時候用指針聲明一個int?
- 7. 什麼時候聲明一個類的屬性?
- 8. 什麼時候在Ruby中使用Singleton類是明智的?
- 9. p5.js - 什麼時候使用var聲明變量vs this.varName
- 10. 什麼時候在C++中使用「declare」?
- 11. 什麼時候在scala中聲明變量時需要顯式類型?
- 12. 什麼`... |類型聲明中的b - > c是什麼意思?
- 13. 在C#中,什麼時候應該使用一個結構,什麼時候應該使用一個類?
- 14. 什麼時候明確使用類型註釋?
- 15. C++ - 什麼時候應該在類中使用指針成員
- 16. 什麼時候應該在C++/CX中使用ref類?
- 17. 什麼時候應該在C++中使用字面類?
- 18. 什麼時候我們在C#中使用嵌套類?
- 19. 什麼時候使用__proto__和什麼時候使用原型
- 20. 什麼時候應該使用AWS,什麼時候不使用
- 21. intn_t什麼時候使用它,什麼時候不使用
- 22. 什麼時候使用Ruby和什麼時候使用PHP
- 23. 什麼時候使用ByteString,什麼時候不使用?
- 24. 什麼時候使用goto * expr;在C?
- 25. 爲什麼我不能在類聲明中使用「使用」聲明?
- 26. 什麼時候和爲什麼我會在C++中使用abs
- 27. 爲什麼在不使用std :: unique_lock的時候這裏聲明瞭
- 28. 什麼時候應該使用async/await,什麼時候不用?
- 29. 助手與C#類?什麼時候用什麼
- 30. 我什麼時候想要通過實際的類聲明接口?
的可能的複製(http://stackoverflow.com/questions/553682/when-can-i-use-a-前向聲明) – merlin2011