位域
Bit mode:2;//mode 占 2 位
類可以將其(非靜態(tài))數(shù)據(jù)成員定義為位域(bit-field),在一個位域中含有一定數(shù)量的二進制位。當一個程序需要向其他程序或硬件設(shè)備傳遞二進制數(shù)據(jù)時,通常會用到位域。
位域在內(nèi)存中的布局是與機器有關(guān)的
位域的類型必須是整型或枚舉類型,帶符號類型中的位域的行為將因具體實現(xiàn)而定
取地址運算符(&)不能作用于位域,任何指針都無法指向類的位域
extern “C”
(1)被 extern 限定的函數(shù)或變量是 extern 類型的
(2)被 extern “C” 修飾的變量和函數(shù)是按照 C 語言方式編譯和鏈接的
extern “C” 的作用是讓 C++ 編譯器將 extern “C” 聲明的代碼當作 C 語言代碼處理,可以避免 C++ 因符號修飾導(dǎo)致代碼不能和C語言庫中的符號進行鏈接的問題。
extern “C” 使用
#ifdef __cplusplusextern “C” {#endif
void *memset(void *, int, size_t);
#ifdef __cplusplus}#endif
struct 和 typedef struct
C 中
// ctypedef struct Student { int age; } S;
等價于
// cstruct Student { int age; };
typedef struct Student S;
此時 S 等價于 struct Student,但兩個標識符名稱空間不相同。
另外還可以定義與 struct Student 不沖突的 void Student() {}。
C++ 中
由于編譯器定位符號的規(guī)則(搜索規(guī)則)改變,導(dǎo)致不同于C語言。
一、如果在類標識符空間定義了 struct Student {。..};,使用 Student me; 時,編譯器將搜索全局標識符表,Student 未找到,則在類標識符內(nèi)搜索。
即表現(xiàn)為可以使用 Student 也可以使用 struct Student,如下:
// cppstruct Student { int age; };
void f( Student me ); // 正確,“struct” 關(guān)鍵字可省略
二、若定義了與 Student 同名函數(shù)之后,則 Student 只代表函數(shù),不代表結(jié)構(gòu)體,如下:
typedef struct Student { int age; } S;
void Student() {} // 正確,定義后 “Student” 只代表此函數(shù)
//void S() {} // 錯誤,符號 “S” 已經(jīng)被定義為一個 “struct Student” 的別名
int main() { Student(); struct Student me; // 或者 “S me”; return 0;}
C++ 中 struct 和 class
總的來說,struct 更適合看成是一個數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)體,class 更適合看成是一個對象的實現(xiàn)體。
區(qū)別
最本質(zhì)的一個區(qū)別就是默認的訪問控制
(1)默認的繼承訪問權(quán)限。struct 是 public 的,class 是 private 的。
(2)struct 作為數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)體,它默認的數(shù)據(jù)訪問控制是 public 的,而 class 作為對象的實現(xiàn)體,它默認的成員變量訪問控制是 private 的。
union 聯(lián)合
聯(lián)合(union)是一種節(jié)省空間的特殊的類,一個 union 可以有多個數(shù)據(jù)成員,但是在任意時刻只有一個數(shù)據(jù)成員可以有值。當某個成員被賦值后其他成員變?yōu)槲炊x狀態(tài)。聯(lián)合有如下特點:
默認訪問控制符為 public
可以含有構(gòu)造函數(shù)、析構(gòu)函數(shù)
不能含有引用類型的成員
不能繼承自其他類,不能作為基類
不能含有虛函數(shù)
匿名 union 在定義所在作用域可直接訪問 union 成員
匿名 union 不能包含 protected 成員或 private 成員
全局匿名聯(lián)合必須是靜態(tài)(static)的
union 使用
#include《iostream》
union UnionTest { UnionTest() : i(10) {}; int i; double d;};
static union { int i; double d;};
int main() { UnionTest u;
union { int i; double d; };
std::cout 《《 u.i 《《 std::endl; // 輸出 UnionTest 聯(lián)合的 10
::i = 20; std::cout 《《 ::i 《《 std::endl; // 輸出全局靜態(tài)匿名聯(lián)合的 20
i = 30; std::cout 《《 i 《《 std::endl; // 輸出局部匿名聯(lián)合的 30
return 0;}
C 實現(xiàn) C++ 類
C 實現(xiàn) C++ 的面向?qū)ο筇匦裕ǚ庋b、繼承、多態(tài))
(1)封裝:使用函數(shù)指針把屬性與方法封裝到結(jié)構(gòu)體中
(2)繼承:結(jié)構(gòu)體嵌套
(3)多態(tài):父類與子類方法的函數(shù)指針不同
寫在最后:對于準備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!
責任編輯:haq
-
編程
+關(guān)注
關(guān)注
88文章
3642瀏覽量
94080 -
C++
+關(guān)注
關(guān)注
22文章
2114瀏覽量
73926
原文標題:C++基礎(chǔ)語法梳理:位域以及 union 聯(lián)合!小知識分享
文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
從Delphi、C++ Builder和Lazarus連接到Oracle數(shù)據(jù)庫
Spire.XLS for C++組件說明
![Spire.XLS for <b class='flag-5'>C++</b>組件說明](https://file1.elecfans.com/web3/M00/05/E7/wKgZO2eFwUuAbuoQAAAbn_khf8A091.png)
EE-112:模擬C++中的類實現(xiàn)
![EE-112:模擬<b class='flag-5'>C++</b><b class='flag-5'>中</b>的類實現(xiàn)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
使用OpenVINO GenAI API在C++中構(gòu)建AI應(yīng)用程序
![使用OpenVINO GenAI API在<b class='flag-5'>C++</b><b class='flag-5'>中</b>構(gòu)建AI應(yīng)用程序](https://file1.elecfans.com/web2/M00/09/51/wKgZomcJ0ziAd_APAAATE9KW7lE007.png)
ostream在c++中的用法
ModusToolbox 3.2在c代碼中包含c++代碼的正確步驟是什么?
C++中實現(xiàn)類似instanceof的方法
![<b class='flag-5'>C++</b><b class='flag-5'>中</b>實現(xiàn)類似instanceof的方法](https://file1.elecfans.com/web2/M00/FE/0C/wKgaomaYe1CAQ31QAAAnf0IkoSU605.png)
C/C++中兩種宏實現(xiàn)方式
鴻蒙OS開發(fā)實例:【Native C++】
![鴻蒙OS開發(fā)實例:【Native <b class='flag-5'>C++</b>】](https://file1.elecfans.com/web2/M00/C8/31/wKgZomYZMTCAaDv3AAY5x13C324319.jpg)
鴻蒙TypeScript學(xué)習(xí)第14天:【聯(lián)合類型】
![鴻蒙TypeScript學(xué)習(xí)第14天:【<b class='flag-5'>聯(lián)合</b>類型】](https://file1.elecfans.com/web2/M00/C5/D1/wKgZomYChGOAUaiiAADe1d8SeRY102.jpg)
使用 MISRA C++:2023? 避免基于范圍的 for 循環(huán)中的錯誤
![使用 MISRA <b class='flag-5'>C++</b>:2023? 避免基于范圍的 for 循環(huán)中的錯誤](https://file1.elecfans.com/web2/M00/A9/66/wKgZomUl7m-AHJX6AABuJjgxs14678.png)
C語言中的位域典型的實例
![<b class='flag-5'>C</b>語言中的<b class='flag-5'>位</b><b class='flag-5'>域</b>典型的實例](https://file1.elecfans.com/web2/M00/C3/6C/wKgaomXlQG6AFgLTAAAJPiv6Ebk706.jpg)
評論