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更適合看成是一個物件的實現體。
2樓:匿名使用者
保留struct主要是為了相容c,
他倆的不同只是struct預設所有屬性和方法是public的,而class預設是private,只有這一點不同
但是人們一般把有方法的結構定義成class,而只有資料,沒有方法的結構定義成struct,但是這也只是程式設計師們的愛好
3樓:女兒飛
基本沒區別
區別就是class不宣告為public是就預設為private
而struct不宣告為private就預設為public
4樓:丨花自飄零丨
最重要一點:class可以實現對資料的保護(它有private,protect);
另外它還可以包含函式...
c++中的struct和class的區別是什麼??
5樓:匿名使用者
在c++中都表示類,唯一的區別是預設的訪問許可權不同。struct預設的訪問許可權是public,class預設的訪問許可權是private。
測試**:
#include
struct a
};class b
};int main()
6樓:匿名使用者
區別就是:struct如果不寫訪問許可權的話,預設是public。而class預設是private,除此之外兩者完全相同。
7樓:magic_旭
區別主要在於二者的訪問許可權,struct的預設訪問許可權是public,而已class則是private,另外struct不能像class那樣繼承
8樓:天好好藍
現在的c++編譯器,會將struct轉為class解釋,所以這個層面沒有區別。
struct預設成員訪問許可權public,class為private
c語言中class和struct的區別是什麼?
9樓:匿名使用者
struct更適合看成是一個資料結構的實現體,class更適合看成是一個物件的實現體。
struct沒有繼承,沒有封裝,要說封裝只有初步封裝。而class把資料,介面可以以三種型別封裝,private,public,protected;還可以繼承和派生。
它們都可以提供自己的介面函式,建構函式。一個類可以由結構繼承而來。struct只能叫做資料的集合,外部可以任意訪問,但是類就完成了封裝,維護了資料安全,這就是物件導向的理念。
class裡可以定義私有成員和保護成員而結構體裡所有的成員,均為公用成員
struct想用{}來賦初值,它也必須滿足很多的約束條件,這些條件實際上就是讓struct更體現出一種資料機構而不是類的特性。那為什麼在上面僅僅將struct改成class,{}就不能用了呢?其實問題恰巧是之前所講的——訪問控制!
如果將struct改成class的時候,訪問控制由public變為private了,那當然就不能用{}來賦初值了。加上一個public,class也是能用{}的,和struct毫無區別。
從上面的區別,可以看出,struct更適合看成是一個資料結構的實現體,class更適合看成是一個物件的實現體。
10樓:柴語
struct沒有繼承,沒有封裝,封裝只有初步得封裝。而class把資料介面以三種型別封裝,private,public,protected,還可以繼承和派生。但是它們都可以提供自己介面函式,建構函式。
一個類可以由結構繼承而來。struct只能叫做資料集合,外部可以任意訪問,但是類就完成了封裝,維護了資料的安全
struct的成員預設許可權是public,而class的成員預設許可權是private
struct的預設繼承方式為public,而class的預設繼承為private
使用上來說沒有太大的區別,不過一個是物件導向的語言,使用更加的方便和簡潔
class和struct如果定義了建構函式的話,都不能用大括號進行初始化
如果沒有定義建構函式,struct可以用大括號初始化
如果沒有定義建構函式,且所有成員變數全是public的話,可以用大括號初始化
struct和class的區別
11樓:久落江邊
首先,討論這個問題應該僅從語法上討論,如果討論不同人之間程式設計風格上的差異,那這個問題是沒有答案的。畢竟不同的人偏好不同。
從語法上,在c++中(只討論c++中)。class和struct做型別定義時只有兩點區別:
(一)預設繼承許可權。如果不明確指定,來自class的繼承按照private繼承處理,來自struct的繼承按照public繼承處理;
(二)成員的預設訪問許可權。class的成員預設是private許可權,struct預設是public許可權。
除了這兩點,class和struct基本就是一個東西。語法上沒有任何其它區別。
不能因為學過c就總覺得連c++中struct和class都區別很大,下面列舉的說明可能比較無聊,因為struct和class本來就是基本一樣的東西,無需多說。但這些說明可能有助於澄清一些常見的關於struct和class的錯誤認識:
(1)都可以有成員函式;包括各類建構函式,解構函式,過載的運算子,友元類,友元結構,友元函式,虛擬函式,純虛擬函式,靜態函式;
(2)都可以有一大堆public/private/protected修飾符在裡邊;
(3)雖然這種風格不再被提倡,但語法上二者都可以使用大括號的方式初始化:aa=;不管a是個struct還是個class,前提是這個類/結構足夠簡單,比如所有的成員都是public的,所有的成員都是簡單型別,沒有顯式宣告的建構函式。
(4)都可以進行復雜的繼承甚至多重繼承,一個struct可以繼承自一個class,反之亦可;一個struct可以同時繼承5個class和5個struct,雖然這樣做不太好。
(5)如果說class的設計需要注意oo的原則和風格,那麼沒任何理由說設計struct就不需要注意。
(6)再次說明,以上所有說法都是指在c++語言中,至於在c裡的情況,c裡是根本沒有「class」,而c的struct從根本上也只是個包裝資料的語法機制。
最後,作為語言的兩個關鍵字,除去定義型別時有上述區別之外,另外還有一點點:「class」這個關鍵字還用於定義模板引數,就像「typename」。但關鍵字「struct」不用於定義模板引數。
12樓:費鴻波沒弄
問的人太多,乾脆整理個faq吧。
首先,討論這個問題應該僅從語法上討論,如果討論不同人之間程式設計風格上的差異,那這個問題是沒有答案的。畢竟不同的人偏好不同。
從語法上,在c++中(只討論c++中)。class和struct做型別定義時只有兩點區別:
(一)預設繼承許可權。如果不明確指定,來自class的繼承按照private繼承處理,來自struct的繼承按照public繼承處理;
(二)成員的預設訪問許可權。class的成員預設是private許可權,struct預設是public許可權。
除了這兩點,class和struct基本就是一個東西。語法上沒有任何其它區別。
不能因為學過c就總覺得連c++中struct和class都區別很大,下面列舉的說明可能比較無聊,因為struct和class本來就是基本一樣的東西,無需多說。但這些說明可能有助於澄清一些常見的關於struct和class的錯誤認識:
(1)都可以有成員函式;包括各類建構函式,解構函式,過載的運算子,友元類,友元結構,友元函式,虛擬函式,純虛擬函式,靜態函式;
(2)都可以有一大堆public/private/protected修飾符在裡邊;
(3)雖然這種風格不再被提倡,但語法上二者都可以使用大括號的方式初始化:aa=;不管a是個struct還是個class,前提是這個類/結構足夠簡單,比如所有的成員都是public的,所有的成員都是簡單型別,沒有顯式宣告的建構函式。
(4)都可以進行復雜的繼承甚至多重繼承,一個struct可以繼承自一個class,反之亦可;一個struct可以同時繼承5個class和5個struct,雖然這樣做不太好。
(5)如果說class的設計需要注意oo的原則和風格,那麼沒任何理由說設計struct就不需要注意。
(6)再次說明,以上所有說法都是指在c++語言中,至於在c裡的情況,c裡是根本沒有「class」,而c的struct從根本上也只是個包裝資料的語法機制。
最後,作為語言的兩個關鍵字,除去定義型別時有上述區別之外,另外還有一點點:「class」這個關鍵字還用於定義模板引數,就像「typename」。但關鍵字「struct」不用於定義模板引數。
c中的class是什麼
呼叫的樣式名 其實就是style 的東西 小例子 c 中的class是定義類的關鍵字,一樓說的是html中的class,那是引用樣式的屬性 class 類 中 class a 定義一個a類 html 裡面的 如一個button控制元件 在html裡面的class就是 css樣式表類,呼叫css檔案裡...
在C中STRUCT是怎麼用的,又有代表什麼意思啊
你的寫法沒錯,只是少了tostring console write myip.b1.tostring myip.b2.tostring 這樣就對了 struct是結構體,他的定義和使用與class類很像,不過他們是有區別的 struct是值型別,class是引用型別給你個例子 public stru...
jQuery中如何選擇多個class的值
jq可以支援多選擇器 比如 123 通過each就可以獲取到被選擇的選擇器的內容。 萬般亦無味 classname1,classname2 用逗號就行了 汐日南莘 1 依次過濾 good filter list filter card 2 屬性選擇 class good list card 此處 順...