(十一)開創自己的資料型別 類的開始

2021-06-09 18:29:29 字數 1540 閱讀 4076

1、類是使用者定義的資料型別,定義時用class

typedef   不建立新型別,僅為已有型別定義別名。

列舉         獨特的型別,但它不是乙個類。

類            全新的,原始的型別。可應用於類物件的操作,完全由使用者定義。

union和struct建立的新型別,從技術上來看它們都是類。

2、結構型別:struct

struct  book;

3、訪問成員用.  即句點,如:a.length

成員可以是函式,其函式體可在內部定義:

struct box

};

函式體也可在結構體外定義:
struct box

;double box::volume()

和類一樣,體外的函式前面必須有box類似的限定,表明這個是其中的成員函式,與其它函式是不同的。

和標頭檔案一樣,體外定義是我們的首選,這樣,宣告與定義分開,便於組織**,有時還會用到預編譯中的東東。

注意:同一型別的多個物件,其函式**只在記憶體中有乙個副本。

4、結構體型別的指標:

定義:   box *p=&a

或:  box *p=new  box;//在自由儲存區分配,並將指標給p,注意其內容是野值,須明確地初始化。最後要delete p進行掃尾

使用:     (*p).length=3.2;   //注意必須用括號,因為.點運算比解除指標*更優先,不加括號會先用點再*

p->length=3.2;     // 這種更常用。

5、聯合型別 union         由於最初記憶體很貴,為了節約記憶體而使用同一塊記憶體「不同時期」儲存不同的型別的值。以節約記憶體。

因此sizeof的結果就是這個結構中最大資料型別的長度。

union  shareld

;   //只會初始化lval,否則你應單獨用ok.dval=3.5進行初始化。

6、匿名聯合:沒有型別名稱的聯合

union 

;             //沒有型別名,這樣的聯合型別,則直接使用成員員進行引用或賦值。

匿名union還具有以下約束:

1).因為匿名聯合不使用點運算子,所以包含在匿名聯合內的元素必須是資料,不允許有成員函式,也不能包含私有或受保護的成員;

2).全域性匿名聯合必須是靜態(static)的,否則就必須放在匿名名字空間中.

網友的評價:

直接在類裡定義成為類的成員吧,我記得是這麼用的

曾經看過乙個ui庫,他把大小相同的型別都放在乙個聯合裡面,這樣就不用型別轉換了

其實聯合主要用作型別轉換

7、各型別的「聯合演出」

enum type=;//列舉型別,注意大寫 

struct sharedate

; type type;//列舉型別

};sharedate value=;//同value=,列表總初始化第乙個

} if(value.type==long) value.ldata++;//應用情況

通過包裝定製自己的資料型別

需求 通過繼承來構建自己的資料型別 例子 列表中只能新增字串 1 class list list 2def 3if type object str 4 使用父類中的方法6 7print 8print 9else 10 print 只能新增字串 1112 if name main 13 list li...

MYSQL 的 3 類資料型別

1 資料型 bool,float,double decimal m,d m是小數字數 精度 的總數,d是小數點 標度 後面的位數 decimal整數最大位數 m 為65。smallint 小的整數。帶符號的範圍是 32768到32767。無符號的範圍是0到65535。mediumint 中等大小的整...

Day 8定義自己的資料型別

基於繼承的方式定義自己的列表型別 class lxy list def print p object ifnot isinstance p object,int raise typeerror must be int definsert self,index int,p object int if ...