班(class)和結構(struct)的區別

在理解類和結構之間的區別之前,我們應該先瞭解一些與它們相關的基本概念。如果不理解概念,就很難理解兩者之間的區別。...

班(class)和結構(struct)的區別

在理解類和結構之間的區別之前,我們應該先瞭解一些與它們相關的基本概念。如果不理解概念,就很難理解兩者之間的區別。

什麼是類和物件:(class and object:)?

這是與面向物件程式設計相關的兩個重要概念,它們構成了構建函式和向其他函式傳遞資料的基礎。為了更好地理解,我們可以把它與現實生活中的例子聯絡起來。一個類可以被視為一個商店,而一個物件可以是任何一個單獨的、特定的商店,如雜貨店、文具店、水果店等。所有物件都共享主類——商店——的共同屬性,反過來,這些物件也可以透過物件擁有自己的專有屬性,如特定的設計、照明等,我們可以實際使用這個類;它們構成類的例項。

類的語法

Class Store {

public string things;

public string design;

}

物件的語法

Store grocery = new Store();

Store Stationery = new Store();

什麼是結構(a struct)?

一個結構只包含資料,因此它有助於透過結構物件來構建各個資料需求。與類不同,它缺少函式。其語法如下:

struct grocery_entrance{

char entrance_name[50];

int entrance_size;

} grocery_entrance;

所有商店都可以使用結構'入口'與個人的名稱和大小。

什麼是繼承(inheritance)?

這類似於兒子繼承父親的財產,反過來,兒子也可以增加自己的一些其他財產。類可以是基類,也可以是派生類,其中前者可以作為基類來形成後者。派生類除了從基類獲得的屬性外,很少為自己新增其他屬性。考慮上述示例時,雜貨店仍然可以派生到特定的雜貨店,例如XYZ雜貨店。

既然我們已經熟悉了基本概念,我們就可以深入瞭解類和結構之間的實際區別了。

它們有何不同?

  • 可重用性:當類構成基本框架時,它們可以被重用;但是,結構是具有特定屬性的單個元素,因此不能重覆使用。例如,雜貨店類可以用於任何型別的雜貨店,但是Struct screery\u入口僅針對這一類是特定的,在其他類中重用它是沒有意義的。
  • 可見性:類中的所有函式都對其物件公開可用。例如,我們在“store”類下有一個名為“things”的函式。函式“things”對其所有物件都是可見的,例如“雜貨店”、“文具店”等。這種可見性在結構中是不可能的,因為結構的資料僅限於自身,而對其他結構不可見。為了說明這一點,我們可以說“雜貨店進門”的資料並不是所有其他商店都能公開看到的。
  • pas**yreference和pas**yvalue:pas**yreference只向函式傳送記憶體位置,而不是實際資料。這意味著每當值發生變化時,變化都會反映在相應的函式中。而傳遞值則只是將值傳送給函式。在這種情況下,傳送後值的更改不會反映在函式中。類使用按引用傳遞,結構使用傳遞值。
  • 繼承:類可以進一步繼承以形成子類,但結構不能利用繼承。例如,類Store將其函式賦予子類“雜貨店”。但是結構'u entrance'不能繼承任何函式。我們可以說這裡沒有子結構這樣的概念。
  • 預設可見性:預設情況下,類的所有成員保持為私有實體,而結構的成員保持為公共實體。
  • 空類和Struct:Class的大小即使為空也使用1位元組的大小,而Struct為空時從不使用任何記憶體。這意味著我們可以說空結構的大小等於0位元組。
  • 垃圾收集:類可以進行垃圾收集,因為它們使用按引用傳遞。因此,在一個儲存資料的位置進行清理更容易。另一方面,Struct不可能進行垃圾收集,因為它使用傳遞值,並且資料分散在不同的位置。
  • 記憶體管理:因為類允許垃圾收集,所以記憶體管理也是有效的;但是,對於Structs來說並不是那麼有效。
  • 建構函式:建構函式通常用特定的值初始化類。我們可以把它看作是用值初始化的東西。如果必須建立一個新類,則呼叫建構函式為該例項分配記憶體。我們甚至可以在呼叫建構函式時將值作為引數傳遞。現在讓我們來進行實際的討論。類允許所有型別的建構函式,例如帶引數或不帶引數的建構函式,而結構只允許帶引數的建構函式,即引數化建構函式。
  • 解構函式:每當我們需要刪除類的例項時,就會呼叫解構函式。解構函式依次刪除該例項並釋放記憶體。類可以使用解構函式,而結構不能。
  • 成員變數初始化:在類中,我們可以直接初始化成員變數;這種初始化在結構中是不可能的。
  • 物件建立:在類中建立物件的一般語法是:

Demo obj=新建Demo();

這意味著在建立類的物件時必須使用關鍵字“new”。在建立結構的物件時,這不是必需的。看看它們的語法:

演示物件;

即使沒有“new”關鍵字,它也能完美地工作。

何時使用類,何時使用結構?

由於類在一起處理資料和函式方面更加靈活,所以當所使用的物件複雜且龐大時,我們可以使用它。在我們的示例中,Mall可以使用類“store”以更好的方式表示系統。然而,結構僅限於較小的物件,因為它們的效率相對低於類。因此,如果你自己設計一個商店,結構是更好的選擇。

如何將結構轉換為類,反之亦然?

您可能聽說過術語“裝箱”和“取消裝箱”將結構轉換為類,反之亦然。雖然這些都是有效的過程,以幫助我們在轉換,他們應該小心處理。由於這直接影響到記憶體的位置,對系統的效能有很大的影響。此外,它還會影響垃圾收集過程,導致整個系統效率低下。因此,僅在需要時才使用這些轉換。

讓我們以表格的形式來看上述差異。

序號 概念 差異
等級 結構
1 可重用性 完全可重覆使用 不可重覆使用
2 能見度 類的所有函式對其物件都是可見的 結構的物件的資料對同一結構的其他物件不可見
按引用傳遞和按值傳遞 使用按引用傳遞 使用傳遞值
4 繼承 一個類的函式可以被它的子類繼承;允許繼承 從不允許繼承
5 預設可見性 預設情況下,類的所有成員都是私有的 預設情況下,結構的所有成員都是公共的
6 空時的大小 空類的大小為1位元組 空結構的大小為0位元組
7 垃圾收集 由於它使用按引用傳遞,所以可以進行垃圾收集 因為它使用傳遞值,所以不可能進行垃圾收集
8 記憶體管理 垃圾收集過程的簡單性有助於有效的記憶體管理 缺少垃圾收**導致記憶體管理不善
9 施工人員 允許所有型別的建構函式,例如帶引數或不帶引數 只允許引數化建構函式
10 解構函式 我可以用它 不能使用它
11 成員變數初始化 允許直接初始化成員變數 不允許成員變數的直接word初始化
12 物件建立 在建立物件時必須使用關鍵字“new” 在物件建立期間使用關鍵字“new”是可選的
13 何時使用? 對於需要繼承的較大和複雜物件更好 對於較小和更簡單的物件,繼承不那麼重要。

我們幾乎涵蓋了類和結構之間的所有差異,如果您覺得缺少某些內容,請告訴我們。讓我們一起學習,充分利用這些知識!

  • 發表於 2021-06-25 00:32
  • 閱讀 ( 59 )
  • 分類:科技

你可能感興趣的文章

類圖(class diagram)和物件圖(object diagram)的區別

...系統功能的高階理解。有兩種主要的UML建模型別。它們是結構建模和行為建模。結構化建模描述了系統的靜態特性。另一方面,行為建模描述了系統的動態特性。類圖和物件圖是兩種結構化建模UML圖。 目錄 1. 概述和主要區別 2. ...

  • 發佈於 2020-10-18 08:23
  • 閲讀 ( 48 )

結構(structure)和c中的並集(union in c)的區別

...兩種方法可以訪問結構的成員。即使用成員運算子(.)和結構指標運算子(->)。可以使用結構“變數”名稱訪問成員。成員名稱。如果程式設計師想訪問學生2的名字,那麼他可以把語句寫成printf(student2.student_namename); 參...

  • 發佈於 2020-10-19 06:29
  • 閲讀 ( 61 )

值型別(value type)和參考型別(reference type)的區別

...用者還可以建立值型別。兩種這樣的使用者定義值型別是結構和列舉。結構包含不同型別的資料。它類似於一個類。“struct”關鍵字用於宣告結構變數。結構示例如下。 僱員結構{ 公共國際機場; 公共字串名稱; } 列舉用於提...

  • 發佈於 2020-10-19 07:42
  • 閲讀 ( 68 )

班(class)和例項變數(instance variables)的區別

...但在任何方法之外。 班(class)和例項變數(instance variables)的區別 類變數與例項變數 類變數是指只有一個變數副本與類的所有例項共享的變數。 當類的每個例項都有自己的變數副本時,例項變數就是變數。 聯想 類...

  • 發佈於 2020-10-19 16:54
  • 閲讀 ( 52 )

班(class)和結構(c)#(structure in c#)的區別

...資料型別不儲存實際資料,但它們包含對變數的引用。類和結構儲存資料。本文討論了C#中類與結構的區別。C中類和結構的關鍵區別在於,類是引用型別的資料型別,而結構是值型別的資料型別。 目錄 1. 概述和主要區別 2. 什麼...

  • 發佈於 2020-10-19 17:15
  • 閲讀 ( 64 )

班(class)和介面(interface)的區別

班(class)和介面(interface)的區別 面向物件程式設計(OOP)是軟體開發中的一種常見正規化。它有助於使用類和物件為程式設計帶來真實的場景。類是建立物件的藍圖。程式設計師可以用屬性和方法建立一個類。學生和老師是客...

  • 發佈於 2020-10-24 04:25
  • 閲讀 ( 63 )

無定形(amorphous)和結晶聚合物(crystalline polymers)的區別

無定形(amorphous)和結晶聚合物(crystalline polymers)的區別 “聚合物”一詞可以定義為由大量重複單元透過化學鍵連線而成的材料。一個單一的聚合物分子可能包含數百萬個小分子或重複單元,這些單元被稱為單體。聚合物是具有...

  • 發佈於 2020-10-25 05:01
  • 閲讀 ( 167 )

詞彙(lexical)和結構歧義(structural ambiguity)的區別

詞彙(lexical)和結構歧義(structural ambiguity)的區別 歧義是指有一種以上的解釋。如果一個詞、短語或句子可以用一個以上的意思來解釋,它就會變得模稜兩可。歧義可以分為詞彙歧義和結構歧義兩大類。當一個詞的詞義不止一個...

  • 發佈於 2020-10-26 19:20
  • 閲讀 ( 82 )

階級意識(class consciousness)和虛假意識(false consciousness)的區別

...們明白,採取政治行動,例如革命來推翻普遍存在的社會結構是至關重要的。 階級衝突 什麼是虛假意識(false c***ciousness)? 現在讓我們關注一下虛假意識。虛假意識是指個體對自己在社會中的地位所具有的扭曲的認識形式。馬克...

  • 發佈於 2020-10-28 19:30
  • 閲讀 ( 63 )

後結構主義(post-structuralism)和結構主義(structuralism)的區別

...結構主義者關注這些變化。 後結構主義(post-structurali**)和結構主義(structurali**)的區別 •結構主義強調理解各種現象的結構的存在。 •後結構主義可以理解為對結構主義的批判。 •後結構主義被認為是歷史主義,而結構主義被...

  • 發佈於 2020-10-29 11:21
  • 閲讀 ( 101 )
是薏仁米不是粥
是薏仁米不是粥

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦