国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++類中使用typedef

2019-11-08 02:39:08
字體:
來源:轉載
供稿:網友

typedef long INDEX 給long這樣的類型起別名,它有兩個用處:一是表明該類型的特殊作用,二是將來有可能要改變這種類型(比如提高精度),

但是現在了解到可以在class類里面使用(并且還有public,PRivate之分哦) C++引入“僅在類內部起作用的類型別名”的初衷應該不難理解:通過限制該類型別名的作用域來防止沖突。在函數體內部typedef,這個別名在函數體以外不可以使用,也就是說,“類型別名”和變量、函數一樣具有作用域。c中有了#define 為什么還要typedef就是為了增強安全和健壯性

隨便記錄下c中的常量(#define pi = 3.14)和c++中的常量(const double pi = 3.14),前者只是簡單的替換,后者還要經過一系列的編譯器的安全檢查的, 這也是增加了安全性

我也試了試 #define 是否可以再class類里面使用, 結果是可以的, 但是#define是沒有作用域的, 也沒有什么public, private之分的, 就相當于一個全局的變量, 什么都可以使用class MyClass{public:  typedef long INDEX;...};  如果該語句放在public段中,則可以在類外部使用,比如:MyClass::INDEX usercode;//聲明一個變量  而如果放在private段中,則只能在類內使用。  以往我也經常用typedef,但是從來沒有在類里面用過。今天算是學了一招了。C++引入“僅在類內部起作用的類型別名”的初衷應該不難理解:通過限制該類型別名的作用域來防止沖突。比如同樣表示長度,可能有的類中只須char即可,有的類中要用int,而有的類可能連long都嫌小。那么,我一概起個別名叫“size”,不同的類中有不同的定義。于是,下面的聲明語句就足以避免沖突而且易于理解:MyClass::size MyClass::GetSize() const;  進而,我試驗了一下在函數體內部typedef,果然這個別名在函數體以外不可以使用,也就是說,“類型別名”和變量、函數一樣具有作用域。  至此,我們可以回過來考慮一下,為什么C++有了“#define”還要“typedef”。過去我始終沒有細想過這個原因。原來這樣做是為了安全性與健壯性。  這里,我聯想到了const,C語言中沒有常量這個概念,如果要用常量,就用“#define pi 3.14”這種形式,但是C++有了“const double pi = 3.14;”雖說繼續用前者一樣可以寫出程序,但這等于放棄了編譯器的安全檢查。  “#define”產生的效果在編譯之前就起作用了,所有的pi都被替換成了3.14這樣一個“立即數”,立即數是沒有類型的,于是,在程序編寫過程中不可能給予合適的提醒,在程序的編譯中也可能產生意想不到的副作用。const將常量作為有類型的數據進行有效管理,既提供了常量的優點,也給予了足夠的安全性。而且,const常量是有作用域的,在程序的不同位置可以給予不同精度的pi。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 沐川县| 临沭县| 客服| 湖南省| 红原县| 平和县| 清水河县| 启东市| 敖汉旗| 明星| 乌苏市| 青阳县| 余江县| 宁陵县| 西吉县| 工布江达县| 长垣县| 南漳县| 吴旗县| 高密市| 永寿县| 嘉善县| 和硕县| 寿宁县| 陇西县| 河间市| 江阴市| 教育| 安乡县| 永安市| 佛冈县| 尼木县| 蒙城县| 南皮县| 固原市| 黑河市| 綦江县| 尚义县| 高邮市| 寻乌县| 扎兰屯市|