類有哪些基本特徵及結構體的區別

  類是面向物件程式設計中的概念,是面向物件程式設計的基礎。以下是小編為大家整理的類的基本特徵,希望你們喜歡。

  類的簡介

  類的實質是一種資料型別,類似於int、char等基本型別,不同的是它是一種複雜的資料型別。因為它的本質是型別,而不是資料,所以不存在於記憶體中,不能被直接操作,只有被例項化為物件時,才會變得可操作。

  類是對現實生活中一類具有共同特徵的事物的抽象。如果一個程式裡提供的型別與應用中的概念有直接的對應,這個程式就會更容易理解,也更容易修改。一組經過很好選擇的使用者定義的類會使程式更簡潔。此外,它還能使各種形式的程式碼分析更容易進行。特別地,它還會使編譯器有可能檢查物件的非法使用。

  類的內部封裝了方法,用於操作自身的成員。類是對某種物件的定義,具有行為***be-havior***,它描述一個物件能夠做什麼以及做的方法***method***,它們是可以對這個物件進行操作的程式和過程。它包含有關物件行為方式的資訊,包括它的名稱、實現操作的函式和實現屬性的資料。

  類的構成包括資料成員和成員函式。資料成員對應類的屬性,類的資料成員也是一種資料型別,並不需要分配記憶體。成員函式則用於操作類的各項屬性,是一個類具有的特有的操作,比如“學生”可以“上課”,而“水果”則不能。類和外界發生互動的操作稱為介面。

  類的三大特性

  封裝性

  將資料和操作封裝為一個有機的整體,由於類中私有成員都是隱藏的,只向外部提供有限的介面,所以能夠保證內部的高內聚性和與外部的低耦合性。用者不必瞭解具體的實現細節,而只是要通過外部介面,以特定的訪問許可權來使用類的成員,能夠增強安全性和簡化程式設計。

  繼承性

  繼承性更符合認知規律,使程式更易於理解,同時節省不必要的重複程式碼。

  多型性

  同一操作作用於不同物件,可以有不同的解釋,產生不同的執行結果。在執行時,可以通過指向基類的指標,來呼叫實現派生類中的方法。

  類與結構體的區別

  在C++、C#語言中,class和struct都可以定義一個類,它們的區別如下:

  C#中,class是引用型別,繼承自System.Object類;struct是值型別,繼承自System.ValueType類,不具多型性。但是注意,System.ValueType是個引用型別。

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

  class支援繼承,可以繼承自類和介面;而struct沒有繼承性,struct不能從class繼承,也不能作為class的基類,但struct支援介面繼承。

  class可以宣告無參建構函式,可以宣告解構函式;而struct只能宣告帶引數建構函式,且不能宣告解構函式。因此,struct沒有自定義的預設無參建構函式,預設無參構造器只是簡單地把所有值初始化為它們的0等價值。

  Java/C#中,例項化時,class要使用new關鍵字;而struct可以不使用new關鍵字,如果不以new來例項化struct,則其所有的欄位將處於未分配狀態,直到所有欄位完成初始化,否則引用未賦值的欄位會導致編譯錯誤。

  class可以實現抽象類***abstract***,可以宣告抽象函式;而struct為抽象,也不能宣告抽象函式。

  class可以宣告protected成員、virtual成員、sealed成員和override成員;而struct不可以,但是值得注意的是,struct可以過載System.Object的3個虛方法,Equals******、ToString******和 GetHashTable******。

  class的物件複製分為淺拷貝和深拷貝,必須經過特別的方法來完成複製;而struct建立的物件複製簡單,可以直接以等號連線即可。

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

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

  我們可以簡單的理解,class是一個可以動的機器,有行為,有多型,有繼承;而struct就是個零件箱,組合了不同結構的零件。其實,class和struct最本質的區別就在於class是引用型別,記憶體分配於託管堆;而struct是值型別,記憶體分配於執行緒的堆疊上。由此差異,導致了上述所有的不同點。所以只有深刻的理解記憶體分配的相關內容,才能更好的駕馭。

  當然,使用class基本可以替代struct的任何場合,class後來居上。雖然在某些方面struct有效能方面的優勢,但是在面向物件程式設計裡,基本是class橫行的天下。

  那麼,有人不免會提出,既然class幾乎可以完全替代struct來實現所有的功能,那麼struct還有存在的必要嗎?答案是,至少在以下情況下,鑑於效能上的考慮,我們應該考慮使用struct來代替class:

  實現一個主要用於儲存資料的結構時,可以考慮struct。

  struct變數佔有堆疊的空間,因此只適用於資料量相對小的場合。

  struct陣列具有更高的效率。

  類的主要詞性變化

  ◎ 類 lèi 〈動〉

  ***1***相似;像 [resemble;be similar to]

  遂入,殺孟陽於床。曰:"非君也,不類。"--《左傳·莊公八年》

  不類前人。--《論衡·自紀》

  益奇而堅,其疏數偃仰,類智者所施設也。--唐·柳宗元《小石城山記》

  與張氏之吝書若不相類。-- 清·袁枚《黃生借書說》

  ***2*** 又

  令黃生貧類予,其借書亦類予。

  語類楚聲。-- 明·魏禧《大鐵椎傳》

  絕類彌勒。--明·魏學洢《核舟記》

  畫虎不成反類犬

  ***3*** 類比;類推 [analogy;reason by]義不殺少而殺眾,不可謂知類。--《墨子》

  ***4*** 又如:類推

  ***5*** 通"戾"。偏,不平 [bias]

  夫富貴者則類,傲之;夫貧賤者則求柔之;是非仁人之情也。--《荀子·不苟》

  ◎ 類 lèi 〈副〉

  大抵;大都 [generally;in the main;mostly]

  觀古今文人,類不護細行。--三國 魏·曹丕《與吳質書》

  走卒類士服。--宋· 司馬光《訓儉示康》


類的三大特性