C中struct和class的區別

2021-03-04 08:54:34 字數 4302 閱讀 1329

1樓:育知同創教育

1、預設的繼承訪問許可權。struct是public的,class是private的。比如如下的**:

struct a

;struct b : a

;這個時候b是public繼承a的。如果都將上面的struct改成class,那麼b是private繼承a的。這就是預設的繼承訪問許可權。所以在平時寫類繼承的時候,通常會這樣寫:

struct b : public a

就是為了指明是public繼承,而不是用預設的private繼承。當然,到底預設是public繼承還是private繼承,取決於子類而不是基類。我的意思是,struct可以繼承class,同樣class也可以繼承struct,那麼預設的繼承訪問許可權是看子類到底是用的struct還是class。

如下:struct a{};

class b : a{}; //private繼承

struct c : b{}; //public繼承

2、struct作為資料結構的實現體,它預設的資料訪問控制是public的,而class作為物件的實現體,它預設的成員變數訪問控制是private的。

3、class」這個關鍵字還用於定義模板引數,就像「typename」。但關鍵字「struct」不用於定義模板引數。

4、還是上面所說的,c++中的struct是對c中的struct的擴充,既然是擴充,那麼它就要相容過去c中struct應有的所有特性。例如你可以這樣寫:

struct a //定義乙個struct

;a a=; //定義時直接賦值

也就是說struct可以在定義的時候用{}賦初值。

如上面的struct中加入乙個建構函式,struct也不能用{}賦初值了。以{}的方式來賦初值,只是用乙個初始化列表來對資料進行按順序的初始化,如上面如果寫成a a=;則c1,n2被初始化,而db3沒有。這樣簡單的copy操作,只能發生在簡單的資料結構上,而不應該放在物件上。

加入乙個建構函式或是乙個虛函式會使struct更體現出一種物件的特性,而使此{}操作不再有效。事實上,是因為加入這樣的函式,使得類的內部結構發生了變化。

到這裡,可以發現即使是struct想用{}來賦初值,它也必須滿足很多的約束條件,這些條件實際上就是讓struct更體現出一種資料機構而不是類的特性。那為什麼在上面僅僅將struct改成class,{}就不能用了呢?其實問題恰巧是之前所講的——訪問控制!

如果將struct改成class的時候,訪問控制由public變為private了,那當然就不能用{}來賦初值了。加上乙個public,你會發現,class也是能用{}的,和struct毫無區別!

從上面的區別,可以看出,struct更適合看成是乙個資料結構的實現體,class更適合看成是乙個物件的實現體。

c++中struct和class的區別

2樓:育知同創教育

c中結構體和類的最大區別是結構體不能定義成員函式。

c++中結構體是可以定義成員函式的,所以c++中結構體和類基本是一樣,唯一的不同點在於,結構體中預設許可權是public,類中預設許可權是private。即如果你在結構體和類中沒有寫public等的時候,結構體預設為public,類中預設為private。

class和struct的區別

3樓:匿名使用者

struct更適合看成是乙個資料結構的實現體,class更適合看成是乙個物件的實現體。

struct沒有繼承,沒有封裝,要說封裝只有初步封裝。而class把資料,介面可以以三種型別封裝,private,public,protected;還可以繼承和派生。

它們都可以提供自己的介面函式,建構函式。乙個類可以由結構繼承而來。struct只能叫做資料的集合,外部可以任意訪問,但是類就完成了封裝,維護了資料安全,這就是物件導向的理念。

class裡可以定義私有成員和保護成員而結構體裡所有的成員,均為公用成員

struct想用{}來賦初值,它也必須滿足很多的約束條件,這些條件實際上就是讓struct更體現出一種資料機構而不是類的特性。那為什麼在上面僅僅將struct改成class,{}就不能用了呢?其實問題恰巧是之前所講的——訪問控制!

如果將struct改成class的時候,訪問控制由public變為private了,那當然就不能用{}來賦初值了。加上乙個public,class也是能用{}的,和struct毫無區別。

從上面的區別,可以看出,struct更適合看成是乙個資料結構的實現體,class更適合看成是乙個物件的實現體。

4樓:千鋒教育

1、class是引用型別,struct是值型別;

2、class可以繼承類、介面和被繼承,struct只能繼承介面,不能被繼承;

3、class有預設的無參建構函式,有析構函式,struct沒有預設的無參建構函式,且只能宣告有參的建構函式,沒有析構函式;

4、class可以使用abstract和sealed,有protected修飾符,struct不可以用abstract和sealed,沒有protected修飾符;

5、class必須使用new初始化,結構可以不用new初始化;

6、class例項由垃圾**機制來保證記憶體的**處理,而struct變數使用完後立即自動解除記憶體分配;

7、從職能觀點來看,class表現為行為,而struct常用於儲存資料;

8、作為引數傳遞時,class變數以按址方式傳遞,而struct變數是以按值方式傳遞的。

5樓:傻缺小宅

struct是內部所有成員變數與函式都為public型別的class

6樓:匿名使用者

c中結構體和類的最大區別是結構體不能定義成員函式。

c++中結構體是可以定義成員函式的,所以c++中結構體和類基本是一樣,唯一的不同點在於,結構體中預設許可權是public,類中預設許可權是private。即如果你在結構體和類中沒有寫public等的時候,結構體預設為public,類中預設為private。

css中id和class的區別

7樓:輕顰淺笑灬

css中「.」是類選擇器的標識「#」是id選擇器的標識 舉個例子:html中

給該div新增樣式,有兩種方法:①直接在css檔案中定義id選擇器#div1{}②在css定義

類選擇器.class1{},然後

指明他的類樣式

兩種方法的效果是一樣的,但是id只能給乙個元素指明類樣式,而class可以在任一元素中定義它的樣式

8樓:匿名使用者

id 是 標籤的主鍵

class 是引用樣式用的

javascript中的class=tar與class=tal什麼區別

9樓:育知同創教育

賦予的值不同

就是這個意思

就是key相同,但值不同

c++中的class和object是什麼意思?

10樓:千鋒教育

c++類的定義抄:

類是定義同一類所有物件的變數和方法的藍圖或原型。

類也可以定義類變數和類方法。可以從類的例項中或者直接從類中訪問類變數和方法。類方法只能操作類變數,不必訪問例項變數或例項方法。

系統在第一次在程式中遇到乙個類時為這個類建立它的所有類變數的拷貝,這個類的所有例項共享它的類變數。

c++物件的定義:

定義乙個類就相當於建立了乙個新的class型別。要使用類,還必須用已經定義的類去說明它的例項變數(即物件)。在c++中,class型別一旦被定義,它的例項變數(物件)就能被建立,並初始化,且能定義指標變數指向它。

例項化的類就是物件。

類和物件其實是c語言裡的結構體的延伸,在c++裡,struct 和 class其實本質上是一樣的,唯一區別就是struct預設是公開的,class預設是私有的,公開時需要宣告為public;還有就是c語言裡的結構體,不能包含函式和繼承,c++可以包含函式以及繼承其他的類。

11樓:劉文正粉絲

class是乙個類, 類是復乙個抽象

制的東西, 它不是bai乙個物體, 它相當於du是乙個藍圖. 然後根據藍圖創zhi

建出來dao的物品就是object.

class和object有一定的關係:

class c;

c object;

這裡, c就是乙個類, 而object就是乙個物件.

c是乙個類名, 而object就是乙個物件名.

12樓:匿名使用者

class:類

object:物件

C語言struct語句的使用

結構體定義不夠準確,應該為 struct studentstr 20 最好放在main 函式外 分數輸入有誤 printf f str i sorce 應改為scanf f str i sorce 結構體的輸出不能整個一起輸出,必須把結構體裡的變數乙個個輸出for i 0 i 20 i 應該是 fo...

C在CLass1中建立的變數如何使其變成公共變數,使任

可以使用靜態變數 如 class class1 使用時用類名.變數名就好,如class1.var1 50 在c 裡沒有全域性變數的概念!但是,如果你想定義某個變數具有全域性功能的話,你可以用public 和static來定義。最好是定義在某個類裡面。比如 定義乙個全域性的整型變數 假設在 useri...

概率學中C和A的怎麼算,概率中C和A的計算區別

例如a 3,6 就是把 6 5 4 3 2 1寫出來,其中前3個數的乘積就是了.計算結果是120 c 3,6 還是把 6 5 4 3 2 1 寫出來,用前3個數的乘積,除以後三個數的乘積.計算結果是20。高中的概率c和a是什麼意思?c表示組合方法的數量。比如 c 3,2 表示從3個物體中選出2個,總...