c語言中:
struct是使用者自定義資料型別(udt)。
c中的struct是沒有許可權設定的。
c中的struct只能是一些變數的集合體,可以封裝資料卻不可以隱藏資料,而且成員不可以是函式。
struct中間的某個型別(例如int)不可以直接初始化。
c++語言中:
struct是抽象資料型別(adt),支援成員函式的定義。
c++中struct增加了訪問許可權,且可以和類一樣有成員函式。 c++中的struct等同於class,只是class預設成員許可權是private,而struct預設成員許可權是public。c++ struct裡面成員初始化的形式和類是相同的,不可以直接初始化,就是不可以定義成員的時候同時初始化。
在標準c++中,struct和class有兩個區別:
第一:struct中的成員預設是public的,class中的預設是private的。
第二:在用模版的時候只能寫template 或template 不能寫template 。
此外,如果沒有多型和虛擬繼承,在c++中,struct和class的訪問效率完全相同!簡單的說就是,訪問class的data member和非virtual function效率和struct完全相同!不管該data member是定義在基類還是派生類的。
如果不是為了和c相容,c++中就不會有struct關鍵字。因此建議是:如果不需要與c相容或傳遞引數給c程式,不要在c++中用struct。
注意class的data member在記憶體中的布局可不一定是data member的申明次序。c++只保證處於同乙個access section的data member按照申明次序排列。
結合typedef的用法
在c中定義乙個結構體型別要用typedef:
typedef
struct student stu;
於是在宣告變數的時候就可:stu stu1;(如果沒有typedef就必須用struct student stu1;來宣告)
這裡的stu實際上就是struct student的別名。stu==struct student
另外這裡也可以不寫student(於是也不能struct student stu1 了,必須是stu stu1,如下)
typedef
struct
stu;
但在c++裡很簡單,直接
struct student
;
於是就定義了結構體型別student,宣告變數時直接student stu2;
2. 在c++中如果用typedef的話,又會造成區別:
struct student stu1;
//stu1是乙個變數 注意!!!!!!!!!
typedef
struct student2 stu2;
//stu2是乙個結構體型別=struct student2
使用時可以直接訪問stu1.a
但是stu2則必須先 stu2 s2;
然後 s2.a=10;
如果在c程式中我們寫:
typedef
struct
aaa,bbb,ccc;
這算什麼呢?
我個人觀察編譯器(vc6)的理解,這相當於
typedef
struct
aaa;
typedef aaa bbb;
typedef aaa ccc;
也就是說aaa,bbb,ccc三者都是結構體型別。宣告變數時用任何乙個都可以,在c++中也是如此。但是你要注意的是這個在c++中如果寫掉了typedef關鍵字,那麼aaa,bbb,ccc將是截然不同的三個物件。
//此處不是很理解。
typedef struct和struct的區別:
typedef
struct tagmystruct
mystruct;
上面的tagmystruct是識別符號,mystruct是變數型別(相當於(int,char等))。
這語句實際上完成兩個操作:
定義乙個新的結構型別
struct tagmystruct
;
分析:tagmystruct稱為「tag」,即「標籤」,實際上是乙個臨時名字,不論是否有typedefstruct 關鍵字和tagmystruct一起,構成了這個結構型別,這個結構都存在。
我們可以用struct tagmystruct varname來定義變數,但要注意,使用tagmystruct varname來定義變數是不對的,因為struct 和tagmystruct合在一起才能表示乙個結構型別。
2) typedef為這個新的結構起了乙個名字,叫mystruct。
typedef struct tagmystruct mystruct;
因此,mystruct實際上相當於struct tagmystruct,我們可以使用mystruct varname來定義變數。
typedef
struct tagmystruct
mystruct;
在c中,這個申明後申請結構變數的方法有兩種:
(1)struct tagmystruct 變數名
(2)mystruct 變數名
在c++中可以有
(1)struct tagmystruct 變數名
(2)mystruct 變數名
(3)tagmystruct 變數名
struct在C和C 中的區別
c 中把struct當成類處理,只不過和類的一點小區別是struct中訪問許可權預設是public,而類中訪問許可權預設是private 而在c中,struct是抽象資料型別 基於這個,會有以下的區別 1 c中定義的時候需要在前面加上struct,而c 中不用 2 c 把struct當成類處理,所以...
struct(在C與C 中的區別)
首先我承認沒有系統地學習過c 今天看到l的 我驚了下,struct怎麼搞得跟class有點相似,還有建構函式啊 查了下資料 struct關鍵字定義乙個結構體型別或乙個結構體型別的變數 具體內容點上面連線吧,我就寫幾點 樣例 struct1.cpp struct person family membe...
struct結構體在c和c 中的區別
很多次遇到這個struct的問題,今天在這裡簡單總結一下我的理解 一 struct在c 中的使用 1 單獨使用struct定義結構體型別 struct student stu1 struct student stu2 stu1.id 1 stu2.id 2 上面定義了乙個結構體型別struct st...