正常函數(而不是靜態函數)是否只有一個C++類的副本,這意味着所有對象都指向同一副本。如果是這樣,正常功能和靜態功能有什麼區別。另外,我的老師說我們不能使用「(object_name)。(func_name)」表示法調用類的靜態函數,但必須使用「class_name::(func_name)」調用它,而我明白這是邏輯要做的事情,但就語言而言,我不允許使用(object_name)。(func_name)符號來調用靜態函數嗎?最後,我不能在類的構造函數或該類的任何其他函數內初始化類的靜態數據成員,但必須從類外部進行初始化?C++類的函數對於所有對象只有一個副本嗎?
-3
A
回答
4
如果只有一個副本,表示所有功能在內存中具有相同的位置,那麼是的,您是對的。區別在於靜態函數不需要爲了被調用而實例化對象。這也意味着你不能訪問該類的其他非靜態成員。
至於初始化,你不能在構造函數中完成它,因爲調用一個可以訪問靜態成員的靜態函數將需要事先調用構造函數。沒有辦法保證。你可以改變構造函數中的靜態,但它必須在別處初始化。
想想這樣的場景:
class A
{
static int x;
public:
A()
{
x = 3;
}
static int getX()
{
return x;
}
}
int main()
{
A::getX(); //what would x be here? It hasn't been initialized since A() was not called.
}
至於調用函數(對象)(功能),而不是(類)::(功能),我相信你被允許這樣做,但你爲什麼?
相關問題
- 1. 是否只有一個事件處理程序的所有對象的副本
- 2. 方法對於eact對象有不同的副本嗎?
- 3. C++查找一個類中所有對象的所有值
- 4. 具有抽象類指針的對象的C++副本
- 5. 如何使數據可用於一個類的所有對象?
- 6. 有一個對象的副本而不是一個鎖定的對象
- 7. 同一對象(C++)的多個副本:線程安全嗎?
- 8. Rails:fields_for只有一個對象
- 9. 如何將對象公開於類中的所有函數?
- 10. Objective-c對象是所有相同類型的C結構嗎?
- 11. 對一個對象的所有引用
- 12. C#將所有對象參數複製到子類對象
- 13. 類對象的所有權目標c
- 14. json對象中只有一個數組
- 15. 對於C++中的靜態類(帶有私有構造函數),我應該定義一個析構函數嗎?
- 16. 如何製作一個沒有參考的對象的副本?
- 17. 所有對象的調用函數
- 18. 如何存儲對一個類的所有對象的引用?
- 19. 選擇數組作用於沒有函數版本的函數對於陣列的每個副本
- 20. Pthread對於使用類對象引用的C++類函數
- 21. 獲取Hazelcast EntryExpiredListener只有一個節點(不是所有副本)
- 22. 列出所有預定的performSelector:withObject:afterDelay:對於一個對象
- 23. Objective-C中的所有對象基本都是指針嗎?
- 24. 刪除核心數據中的對象(類似對象/副本)
- 25. 在rails中創建一個對象及其所有關聯模型的副本
- 26. C++對象的地圖本地副本
- 27. 所有訪問者只有一個對象實例?
- 28. 列出某個類的所有對象
- 29. NSMutableArray只包含最後一個對象的副本
- 30. 訪問所有類的對象數組
我真的推薦一本好書。它不需要是C++特定的。首先你需要了解面向對象的原則。例如。什麼是類,什麼是對象。除此之外。 -1爲壞的問題。你應該真的學會如何發表可讀的問題。 – mkaes
@mkaes,以及爵士,讓你覺得我不明白麪向對象編程的原理,例如。什麼是課堂,什麼是對象。就語言而言,我接受它是寫得很糟糕,因爲我很匆忙 – SegFault