類有哪些基本特征及結構體的區(qū)別
類有哪些基本特征及結構體的區(qū)別
類是面向對象程序設計中的概念,是面向對象編程的基礎。以下是學習啦小編為大家整理的類的基本特征,希望你們喜歡。
類的簡介
類的實質是一種數(shù)據(jù)類型,類似于int、char等基本類型,不同的是它是一種復雜的數(shù)據(jù)類型。因為它的本質是類型,而不是數(shù)據(jù),所以不存在于內存中,不能被直接操作,只有被實例化為對象時,才會變得可操作。
類是對現(xiàn)實生活中一類具有共同特征的事物的抽象。如果一個程序里提供的類型與應用中的概念有直接的對應,這個程序就會更容易理解,也更容易修改。一組經(jīng)過很好選擇的用戶定義的類會使程序更簡潔。此外,它還能使各種形式的代碼分析更容易進行。特別地,它還會使編譯器有可能檢查對象的非法使用。
類的內部封裝了方法,用于操作自身的成員。類是對某種對象的定義,具有行為(be-havior),它描述一個對象能夠做什么以及做的方法(method),它們是可以對這個對象進行操作的程序和過程。它包含有關對象行為方式的信息,包括它的名稱、實現(xiàn)操作的函數(shù)和實現(xiàn)屬性的數(shù)據(jù)。
類的構成包括數(shù)據(jù)成員和成員函數(shù)。數(shù)據(jù)成員對應類的屬性,類的數(shù)據(jù)成員也是一種數(shù)據(jù)類型,并不需要分配內存。成員函數(shù)則用于操作類的各項屬性,是一個類具有的特有的操作,比如“學生”可以“上課”,而“水果”則不能。類和外界發(fā)生交互的操作稱為接口。
類的三大特性
封裝性
將數(shù)據(jù)和操作封裝為一個有機的整體,由于類中私有成員都是隱藏的,只向外部提供有限的接口,所以能夠保證內部的高內聚性和與外部的低耦合性。用者不必了解具體的實現(xiàn)細節(jié),而只是要通過外部接口,以特定的訪問權限來使用類的成員,能夠增強安全性和簡化編程。
繼承性
繼承性更符合認知規(guī)律,使程序更易于理解,同時節(jié)省不必要的重復代碼。
多態(tài)性
同一操作作用于不同對象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結果。在運行時,可以通過指向基類的指針,來調用實現(xiàn)派生類中的方法。
類與結構體的區(qū)別
在C++、C#語言中,class和struct都可以定義一個類,它們的區(qū)別如下:
C#中,class是引用類型,繼承自System.Object類;struct是值類型,繼承自System.ValueType類,不具多態(tài)性。但是注意,System.ValueType是個引用類型。
從職能觀點來看,class表現(xiàn)為行為;而struct常用于存儲數(shù)據(jù)。
class支持繼承,可以繼承自類和接口;而struct沒有繼承性,struct不能從class繼承,也不能作為class的基類,但struct支持接口繼承。
class可以聲明無參構造函數(shù),可以聲明析構函數(shù);而struct只能聲明帶參數(shù)構造函數(shù),且不能聲明析構函數(shù)。因此,struct沒有自定義的默認無參構造函數(shù),默認無參構造器只是簡單地把所有值初始化為它們的0等價值。
Java/C#中,實例化時,class要使用new關鍵字;而struct可以不使用new關鍵字,如果不以new來實例化struct,則其所有的字段將處于未分配狀態(tài),直到所有字段完成初始化,否則引用未賦值的字段會導致編譯錯誤。
class可以實現(xiàn)抽象類(abstract),可以聲明抽象函數(shù);而struct為抽象,也不能聲明抽象函數(shù)。
class可以聲明protected成員、virtual成員、sealed成員和override成員;而struct不可以,但是值得注意的是,struct可以重載System.Object的3個虛方法,Equals()、ToString()和 GetHashTable()。
class的對象復制分為淺拷貝和深拷貝,必須經(jīng)過特別的方法來完成復制;而struct創(chuàng)建的對象復制簡單,可以直接以等號連接即可。
class實例由垃圾回收機制來保證內存的回收處理;而struct變量使用完后立即自動解除內存分配。
作為參數(shù)傳遞時,class變量是以按址方式傳遞;而struct變量是以按值方式傳遞的。
我們可以簡單的理解,class是一個可以動的機器,有行為,有多態(tài),有繼承;而struct就是個零件箱,組合了不同結構的零件。其實,class和struct最本質的區(qū)別就在于class是引用類型,內存分配于托管堆;而struct是值類型,內存分配于線程的堆棧上。由此差異,導致了上述所有的不同點。所以只有深刻的理解內存分配的相關內容,才能更好的駕馭。
當然,使用class基本可以替代struct的任何場合,class后來居上。雖然在某些方面struct有性能方面的優(yōu)勢,但是在面向對象編程里,基本是class橫行的天下。
那么,有人不免會提出,既然class幾乎可以完全替代struct來實現(xiàn)所有的功能,那么struct還有存在的必要嗎?答案是,至少在以下情況下,鑒于性能上的考慮,我們應該考慮使用struct來代替class:
實現(xiàn)一個主要用于存儲數(shù)據(jù)的結構時,可以考慮struct。
struct變量占有堆棧的空間,因此只適用于數(shù)據(jù)量相對小的場合。
struct數(shù)組具有更高的效率。
類的主要詞性變化
◎ 類 lèi 〈動〉
(1)相似;像 [resemble;be similar to]
遂入,殺孟陽于床。曰:"非君也,不類。"--《左傳·莊公八年》
不類前人。--《論衡·自紀》
益奇而堅,其疏數(shù)偃仰,類智者所施設也。--唐·柳宗元《小石城山記》
與張氏之吝書若不相類。-- 清·袁枚《黃生借書說》
(2) 又
令黃生貧類予,其借書亦類予。
語類楚聲。-- 明·魏禧《大鐵椎傳》
絕類彌勒。--明·魏學洢《核舟記》
畫虎不成反類犬
(3) 類比;類推 [analogy;reason by]義不殺少而殺眾,不可謂知類。--《墨子》
(4) 又如:類推
(5) 通"戾"。偏,不平 [bias]
夫富貴者則類,傲之;夫貧賤者則求柔之;是非仁人之情也。--《荀子·不茍》
◎ 類 lèi 〈副〉
大抵;大都 [generally;in the main;mostly]
觀古今文人,類不護細行。--三國 魏·曹丕《與吳質書》
走卒類士服。--宋· 司馬光《訓儉示康》
看過“類的三大特性”的人還看了:
1.什么是拓撲結構
2.秋季種什么蔬菜
3.什么是英語短語
4.語文中什么是代詞