C/C++ struct 区别
今天參看了louden用c編寫的編譯器,發現其中一些地方使用struct很奇妙。所以又研究了一下struct的區別,并發現c和c++在某些地方是有區別的。
struct作為類的一種特例,是用來自定義數據結構的,在編程的過程中是很有用的。C和C++的主要區別是:一個結構標記聲明后,C語言必須在結構標記前加上struct才能作為結構類型名,而C++語言中,結構標記可以直接作為結構類型名使用。此外,結構在C++中被作為類的一種特例,并且在結構中,數據成員和成員函數默認的訪問權限是共有的,兒類的則是私有的。
首先我們先在C中使用struct:
按照上面的敘述,我很自然的如下書寫:
struct Student{
int a;
int b;
};
int main(){
struct Student st;
st.a = 90;
st.b = 80;
printf("%d",st.a);
}
如果我把struct去掉的話那么編譯器就會報錯(編譯器使用的是vc 6.0),說Student是未聲明的標識符。但是在c++中就不用擔心這一點。如下:
#include<iostream>
using namespace std;
struct Student{
int a;
int b;
};
int main(){
Student st;
st.a = 90;
st.b = 80;
cout<<st.a<<endl;
Student tems = st;
cout<<tems.a<<endl;
return 0;
}
編譯器不會報錯。從上述的程序中我們還可以看到,struct在C和C++中可以實現各個變量之間的賦值,也就是說不用重載賦值操作符。
那么在C中我可不可以把struct給去掉呢?當然可以,你可以這么做:
typedef struct student{
int a;
int b;
} Student;
int main(){
Student st;
st.a = 90;
st.b = 80;
printf("%d",st.a);
}
使用typedef即可實現上述要求。
++++++++++++++++++++++++++++++++++++++++++++++++++++++
在C和C++中struct和union是非常相似的,只不過union共享存儲區而已,共享的是數據變量所占空間最大的存儲區。其他和struct一樣,都如上所述:
union Student{
int a;
int b;
};
int main(){
union Student st;
st.a = 90;
st.b = 80;
printf("%d",st.a);
}
輸出結果是80
C++:
#include<iostream>
using namespace std;
union Student{
int a;
int b;
};
int main(){
Student st;
st.a = 90;
st.b = 80;
cout<<st.a<<endl;
Student tems = st;
cout<<tems.a<<endl;
return 0;
}
輸出結果是80 80,從中可以看出它也重載了=操作符。
總結
以上是生活随笔為你收集整理的C/C++ struct 区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 纹理映射技术
- 下一篇: strcpy函数实现的几种方式