C 语言和C++语言的 struct对比
C 語言和C++語言的 struct對比
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? author: stonehat
1. C++語言將struct當成類來處理的,所以C++的struct可以包含C++類的所有東西,例如構造函數,析構函數,友元等,C++的struct和C++類唯一不同就是
? ? struct成員默認的是public, C++默認private。而C語言struct不是類,不可以有函數,也不能使用類的特征例如public等關鍵字 ,也不可以有static關鍵字。
2. C++ struct里面成員初始化的形式和類是相同的,不可以直接初始化,就是不可以定義成員的時候同時初始化。C語言 struct中間的某個類型(例如int)也不可以直接初始化。
? ?就是說下面int a = 0;在C++和C語言里面都是不能通過的。
? ?
struct HE{
int a = 0;
} //C++和C編譯是不能通過的。
3. ?初始化方式,C++ struct的初始化,C++不僅擁有C語言的初始化方式。如下:
?
struct HE{
int a;
};
int main(){
HE d={3}; // 因為 HE在C++是類名,可以省略struct。C語言里面要加上struct 才行。
return 0;
}
也可以使用類的初始化方式
struct HE{
int a;
};
int main(){
HE d;
d.a = 3;
return 0;
}
4. 類型不同,下面代碼:
?
struct HE{
int a;
};
在C里面實際上數據類型為 (struct HE),所以定義一個結構HE變量都要 帶上struct.?
struct HE a; //C語言 變量方式而在C++里面實際上數據類型為HE(主要是因為結構體被當成類對待了),所以定義變量不需要 struct.
HE a; //C++語言 變量5. typedef struct 在C++和C語言中都是一樣的功能,定義別名。 但是要注意下面的代碼的區別
//代碼一
#include <stdio.h>#include <stdlib.h>
typedef struct HE
{
int a;
} *PHE,DHE,EHE; //這是定義了一個struct HE*類型別名和兩個普通別名,main函數只考慮指針型別名。
int main(){
PHE a = (PHE)malloc(sizeof(struct HE)); //這是C語言的寫法
//PHE a = new HE(); 這是C++語言的寫法
return 0;
} //代碼二
#include <stdio.h>
#include <stdlib.h>
struct HE
{
int a;
} *PHE,DHE,EHE; //這里定義了一個指針型變量和兩個普通變量
上面兩個代碼省略 struct的名字 HE都是可以的。
總結:C++語言因為是和C語言兼容的,所以C語言的語法在C++編譯器里不會出錯,但是程序員最好知道什么是C語言,什么是C++語言。
轉載于:https://www.cnblogs.com/stonehat/archive/2011/10/07/2200629.html
總結
以上是生活随笔為你收集整理的C 语言和C++语言的 struct对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员必备,C#各类项目、开源项目插件资
- 下一篇: Centos7 Apache 2.4.1