不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學(xué)習(xí)啦 > 知識大全 > 知識百科 > 百科知識 > 類有哪些基本特征及結(jié)構(gòu)體的區(qū)別

類有哪些基本特征及結(jié)構(gòu)體的區(qū)別

時(shí)間: 謝君787 分享

類有哪些基本特征及結(jié)構(gòu)體的區(qū)別

  類是面向?qū)ο蟪绦蛟O(shè)計(jì)中的概念,是面向?qū)ο缶幊痰幕A(chǔ)。以下是學(xué)習(xí)啦小編為大家整理的類的基本特征,希望你們喜歡。

  類的簡介

  類的實(shí)質(zhì)是一種數(shù)據(jù)類型,類似于int、char等基本類型,不同的是它是一種復(fù)雜的數(shù)據(jù)類型。因?yàn)樗谋举|(zhì)是類型,而不是數(shù)據(jù),所以不存在于內(nèi)存中,不能被直接操作,只有被實(shí)例化為對象時(shí),才會變得可操作。

  類是對現(xiàn)實(shí)生活中一類具有共同特征的事物的抽象。如果一個(gè)程序里提供的類型與應(yīng)用中的概念有直接的對應(yīng),這個(gè)程序就會更容易理解,也更容易修改。一組經(jīng)過很好選擇的用戶定義的類會使程序更簡潔。此外,它還能使各種形式的代碼分析更容易進(jìn)行。特別地,它還會使編譯器有可能檢查對象的非法使用。

  類的內(nèi)部封裝了方法,用于操作自身的成員。類是對某種對象的定義,具有行為(be-havior),它描述一個(gè)對象能夠做什么以及做的方法(method),它們是可以對這個(gè)對象進(jìn)行操作的程序和過程。它包含有關(guān)對象行為方式的信息,包括它的名稱、實(shí)現(xiàn)操作的函數(shù)和實(shí)現(xiàn)屬性的數(shù)據(jù)。

  類的構(gòu)成包括數(shù)據(jù)成員和成員函數(shù)。數(shù)據(jù)成員對應(yīng)類的屬性,類的數(shù)據(jù)成員也是一種數(shù)據(jù)類型,并不需要分配內(nèi)存。成員函數(shù)則用于操作類的各項(xiàng)屬性,是一個(gè)類具有的特有的操作,比如“學(xué)生”可以“上課”,而“水果”則不能。類和外界發(fā)生交互的操作稱為接口。

  類的三大特性

  封裝性

  將數(shù)據(jù)和操作封裝為一個(gè)有機(jī)的整體,由于類中私有成員都是隱藏的,只向外部提供有限的接口,所以能夠保證內(nèi)部的高內(nèi)聚性和與外部的低耦合性。用者不必了解具體的實(shí)現(xiàn)細(xì)節(jié),而只是要通過外部接口,以特定的訪問權(quán)限來使用類的成員,能夠增強(qiáng)安全性和簡化編程。

  繼承性

  繼承性更符合認(rèn)知規(guī)律,使程序更易于理解,同時(shí)節(jié)省不必要的重復(fù)代碼。

  多態(tài)性

  同一操作作用于不同對象,可以有不同的解釋,產(chǎn)生不同的執(zhí)行結(jié)果。在運(yùn)行時(shí),可以通過指向基類的指針,來調(diào)用實(shí)現(xiàn)派生類中的方法。

  類與結(jié)構(gòu)體的區(qū)別

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

  C#中,class是引用類型,繼承自System.Object類;struct是值類型,繼承自System.ValueType類,不具多態(tài)性。但是注意,System.ValueType是個(gè)引用類型。

  從職能觀點(diǎn)來看,class表現(xiàn)為行為;而struct常用于存儲數(shù)據(jù)。

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

  class可以聲明無參構(gòu)造函數(shù),可以聲明析構(gòu)函數(shù);而struct只能聲明帶參數(shù)構(gòu)造函數(shù),且不能聲明析構(gòu)函數(shù)。因此,struct沒有自定義的默認(rèn)無參構(gòu)造函數(shù),默認(rèn)無參構(gòu)造器只是簡單地把所有值初始化為它們的0等價(jià)值。

  Java/C#中,實(shí)例化時(shí),class要使用new關(guān)鍵字;而struct可以不使用new關(guān)鍵字,如果不以new來實(shí)例化struct,則其所有的字段將處于未分配狀態(tài),直到所有字段完成初始化,否則引用未賦值的字段會導(dǎo)致編譯錯(cuò)誤。

  class可以實(shí)現(xiàn)抽象類(abstract),可以聲明抽象函數(shù);而struct為抽象,也不能聲明抽象函數(shù)。

  class可以聲明protected成員、virtual成員、sealed成員和override成員;而struct不可以,但是值得注意的是,struct可以重載System.Object的3個(gè)虛方法,Equals()、ToString()和 GetHashTable()。

  class的對象復(fù)制分為淺拷貝和深拷貝,必須經(jīng)過特別的方法來完成復(fù)制;而struct創(chuàng)建的對象復(fù)制簡單,可以直接以等號連接即可。

  class實(shí)例由垃圾回收機(jī)制來保證內(nèi)存的回收處理;而struct變量使用完后立即自動解除內(nèi)存分配。

  作為參數(shù)傳遞時(shí),class變量是以按址方式傳遞;而struct變量是以按值方式傳遞的。

  我們可以簡單的理解,class是一個(gè)可以動的機(jī)器,有行為,有多態(tài),有繼承;而struct就是個(gè)零件箱,組合了不同結(jié)構(gòu)的零件。其實(shí),class和struct最本質(zhì)的區(qū)別就在于class是引用類型,內(nèi)存分配于托管堆;而struct是值類型,內(nèi)存分配于線程的堆棧上。由此差異,導(dǎo)致了上述所有的不同點(diǎn)。所以只有深刻的理解內(nèi)存分配的相關(guān)內(nèi)容,才能更好的駕馭。

  當(dāng)然,使用class基本可以替代struct的任何場合,class后來居上。雖然在某些方面struct有性能方面的優(yōu)勢,但是在面向?qū)ο缶幊汤?,基本是class橫行的天下。

  那么,有人不免會提出,既然class幾乎可以完全替代struct來實(shí)現(xiàn)所有的功能,那么struct還有存在的必要嗎?答案是,至少在以下情況下,鑒于性能上的考慮,我們應(yīng)該考慮使用struct來代替class:

  實(shí)現(xiàn)一個(gè)主要用于存儲數(shù)據(jù)的結(jié)構(gòu)時(shí),可以考慮struct。

  struct變量占有堆棧的空間,因此只適用于數(shù)據(jù)量相對小的場合。

  struct數(shù)組具有更高的效率。

  類的主要詞性變化

  ◎ 類 lèi 〈動〉

  (1)相似;像 [resemble;be similar to]

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

  不類前人。--《論衡·自紀(jì)》

  益奇而堅(jiān),其疏數(shù)偃仰,類智者所施設(shè)也。--唐·柳宗元《小石城山記》

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

  (2) 又

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

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

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

  畫虎不成反類犬

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

  (4) 又如:類推

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

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

  ◎ 類 lèi 〈副〉

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

  觀古今文人,類不護(hù)細(xì)行。--三國 魏·曹丕《與吳質(zhì)書》

  走卒類士服。--宋· 司馬光《訓(xùn)儉示康》


看過“類的三大特性”的人還看了:

1.什么是拓?fù)浣Y(jié)構(gòu)

2.秋季種什么蔬菜

3.什么是英語短語

4.語文中什么是代詞

5.常見的15種公文分類有哪些

1963963