C C 中結構體與類

2022-08-28 08:54:09 字數 1692 閱讀 2227

先來說說c和c++中結構體的不同

a) c語言中的結構體不能為空,否則會報錯

1>d:\myproject\visual studio 2013\projects\myc++\main.c(71): error c2016: c 要求乙個結構或聯合至少有乙個成員

b) c語言中的結構體只涉及到資料結構,而不涉及到演算法,也就是說在c中資料結構和演算法是分離的。換句話說就是c語言中的結構體只能定義成員變數,但是不能定義成員函式。然而在c++中既可以定義成員變數又可以定義成員函式, c++中的結構體和類體現了資料結構和演算法的結合。

不過雖然c語言的結構體中不能定義成員函式,但是卻可以定義函式指標,不過函式指標本質上不是函式而是指標,所以總的來說c語言中的結構體只是乙個複雜資料型別 ,只能定義成員變數,不能定義成員函式,不能用於物件導向程式設計。來看乙個函式指標的例子:

[cpp]view plain

copy

print

?int my_add(int a, int b)  

int my_sub(int a, int b)  

struct  ctest  

;  int main()  

c) 比如說這個結構體吧:

[cpp]view plain

copy

print

?struct  ctest  

;  int main()  

這樣在c語言中是編譯不過去的,原因提示未定義識別符號ctest。總的來說就是在c語言中結構體變數定義的時候,若為struct 結構體名 變數名定義的時候,struct不能省略。但是在c++之中則可以省略struct。

再來分析c++中的結構體與類的區別:

先來說說c++中兩者的相同之處: 結構體中也可以包含函式;也可以定義public、private、protected資料成員;定義了結構體之後,可以用結構體名來建立物件。也就是說在c++當中,結構體中可以有成員變數,可以有成員函式,可以從別的類繼承,也可以被別的類繼承,可以有虛函式。總的一句話:class和struct的語法基本相同,從宣告到使用,都很相似,但是struct的約束要比class多,理論上,struct能做到的class都能做到,但class能做到的stuct卻不一定做的到。

再來說說兩者的區別:對於成員訪問許可權以及繼承方式,class中預設的是private,而struct中則是public。class還可以用於表示模板型別,struct則不行。

注意struct是可以繼承與被繼承的,這一點有的人可能忽略了,來看一下struct中的繼承與被繼承:

[cpp]view plain

copy

print

?struct a  

;  virtual void dynamic()  

protected:  

void fun();  

private:  

int m_data;  

};  

struct b:public a  

};  

int main()  

編譯完全沒有問題。

總結一下就是:

概念:class和struct的語法基本相同,從宣告到使用,都很相似,但是struct的約束要比class多,理論上,struct能做到的class都能做到,但class能做到的stuct卻不一定做的到。

C C 語法 (四)類與結構體

演算法題中使用的類知識很少,所以沒啥好寫的.類與結構體的主要區別在於,如果不定義成員是公有或私有,類中預設設定為private,而結構體中預設設定為public.以下隨便寫點結構體語法,背過就完事了.struct person 無參建構函式 person int age,int height age...

Object c 中結構體與類

一 概念 1 結構體 struct 是由一系列具有相同型別或不同型別的資料構成的資料集合,叫做結構。2 類物件是一種資料結構,儲存類的基本資訊 類大小,類名稱,類的版本,繼承層次,以及訊息與函式的對映表等 二 記憶體分布 共同之處 都可以有屬性和方法 都有構造器 都支援附屬指令碼 都支援擴充套件 都...

C C 結構體過渡到類

物件能提供服務 功能函式 建立物件,確定輸入 輸出引數,銷毀物件 建立物件 定義結構體 struct resultset 建立物件 resultset creat 銷毀物件 void destory resultset obj 避免外部隨意呼叫,破壞資料內部的完整性 使用函式介面會增加自由度 這一點...