C 資料成員

2021-06-22 05:11:51 字數 850 閱讀 6357

多寶平台

:1. static data member

(1) 每乙個static member的訪問,並不會造成任何空間或執行時間上的負擔。

另外 如果有point org,*p=&org;

則org.x=0與p->x=0執行開銷完全相同,

這也是唯一一種情況

,因為static member並不在物件中,這只是個語法上的便宜行事而已。

(2)即使這個static member是經過虛擬或間接繼承而來的,依然不影響他的訪問效率。因為他是程式中的唯一實體。

(3)兩個類有同名的static member並不會造成名字衝突,多寶

因為屬於不同的class,會被c++名字修飾機制修飾成不同名字。

(4)另外,如果取乙個static member的位址會得到乙個指向其資料型別的指標(如 int*),而不是乙個指向其class member的指標。因為static member並不在乙個class object之中。

2. nonstatic data member

(1) 

欲對乙個nanstatic data member進行訪問,編譯器需要使用物件的位址加上data member的偏移量(offset)。(data member的偏移量可在編譯期獲得)

(2) 

對於org.x=0與p->x=0的訪問效率,當x是乙個直接類成員,或者在單一繼承、多繼承中(多繼承中offset也是在編譯期計算好的),兩者效率完全相同,但是如果x是虛基類的成員,則後者的訪問效率會慢一些。因為編譯器不能確定p指向的基類還是派生類,而指向不同的類,虛基類的位置是不同的,也就導致data member的偏移量不同,所以這個操作必須延遲到執行期。

c 靜態資料成員

1.靜態資料成員的定義class test 靜態資料成員在類內只能宣告,不能定義.宣告格式為 static 資料型別 變數名 要對靜態資料成員定義和初始化必須在類的外面也就是在全域性作用域中定義,如果定義不給出初值,則預設初值為0。靜態資料成員可以初始化,但只能在類體外初始化。格式 資料型別 類名 ...

C 靜態成員 2 靜態資料成員

目錄 1.靜態成員的構造 2.靜態成員的訪問 3.靜態成員的初始化 include class a class b int main 輸出 b s constructor called 結論 程式只呼叫了b的建構函式,而沒有呼叫a的建構函式。原因很簡單,靜態成員僅僅在類宣告的時候而宣告,但是不會定義...

C 靜態成員函式和靜態資料成員

當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...