c primer 學習筆記 類之類的宣告和定義

2021-06-18 01:46:36 字數 2061 閱讀 6062

封裝是一項低層次的元素組合起來的形成新的、高層次實體珠技術。函式是封裝的一種形式:函式所執行的細節行為被封裝在函式本身這個更大的實體中。被封裝的元素隱藏了它們的實現細節——可以呼叫乙個函式但不能訪問它所執行的語句。同樣地,類也是乙個封裝的實體:它代表若干成員的聚焦,大多數(良好設計的)類型別隱藏了實現該型別的成員。

a.避免類內部出現無意的、可能破壞物件狀態的使用者級錯誤。

b.隨時間推移可以根據需求改變或缺陷(bug)報告來完美類實現,而無須改變使用者級**。

除了定義資料和函式成員之外,類還可以定義自己的區域性型別名字。如果為std::string::size_type 提供乙個型別別名,那麼 screen 類將是乙個更好的抽象:

class screen ;
類所定義的型別名遵循任何其他成員的標準訪問控制。將index 的定義放在類的 public 部分,是因為希望使用者使用這個名字。screen 類的使用者不必了解用 string 實現

的底層細節。定義index 來隱藏 screen 的實現細節。將這個型別設為 public,就允許使用者使用這個名字。

過載操作符有特殊規則,是個例外,成員函式只能過載本類的其他成員函式。類的成員函式與普通的非成員函式以及在其他類中宣告的函式不相關,也不能過載它們。過載的成員函式和普通函式應用相同的規則:兩個過載成員的形參數量和型別不能完全相同。呼叫非成員過載函式所用到的函式匹配過程也應用於過載成員函式的呼叫。

可以在類定義體內部指定乙個成員為inline,作為其宣告的一部分。或者,也可以在類定義外部的函式定義上指定inline。在宣告和定義處指定inline 都是合法的。在類的外部定義inline 的乙個好處是可以使得模擬較容易閱讀。

像其他inline 一樣,inline 成員函式的定義必須在呼叫該函式的每個原始檔中是可見的。不在類定義體內定義的 inline 成員函式,其定義通常應放在有類定義的同一標頭檔案中。

在乙個給定的原始檔中,乙個類只能被定義一次。如果在多個檔案中定義乙個類,那麼每個檔案中的定義必須是完全相同的。

可以宣告乙個類而不定義它:

class screen; // declaration of the screen class

這個宣告,有時稱為前向宣告(forward declaraton),在程式中引入了類型別的screen。在宣告之後、定義之前,類screen 是乙個不完全型別(incompetetype),即已知screen 是乙個型別,但不知道包含哪些成員。

不完全型別(incomplete type)只能以有限方式使用。不能定義該型別的物件。不完全型別只能用於定義指向該型別的指標及引用,或者用於宣告(而不是定義)使用該型別作為形參型別或返回型別的函式。

在建立類的物件之前,必須完整地定義該類。必須定義類,而不只是宣告類,這樣,編譯器就會給類的物件預定相應的儲存空間。同樣地,在使用引用或指標訪問類的成員之

前,必須已經定義類。

類的前向宣告一般用來編寫相互依賴的類。

只有當類定義已經在前面出現過,資料成員才能被指定為該類型別。如果該型別是不完全型別,那麼資料成員只能是指向該類型別的指標或引用。因為只有當類定義體完成後才能定義類,因此類不能具有自身型別的資料成員。然而,只要類名一出現就可以認為該類已宣告。因此,類的資料成員可以是指向自身型別的指標

或引用:

class linkscreen ;
定義乙個類時,也就是定義了乙個型別。一旦定義了類,就可以定義該型別的物件。定義物件時,將為其分配儲存空間,但(一般而言)定義型別時不進行儲存分配。

定義了乙個類型別之後,可以按以下兩種方式使用。

a.將類的名字直接用作型別名。

b.指定關鍵字class 或 struct,後面跟著類的名字:

eg:

sales_item item1; // default initialized object of type sales_item

class sales_item item1; // equivalent definition of item1

兩種引用類型別方法是等價的。第二種方法是從 c 繼承而來的,在 c++ 中仍然有效。第一種更為簡練,由 c++ 語言引入,使得類型別更容易使用。

C Primer 學習筆記 IO類

1.ifstream 和istringstream都繼承自istream,因此對三個類的物件的操作相似 2.io物件不能拷貝不能賦值 io操作的函式形參和返回值型別不能為流型別 進行io操作的函式常以引用方式傳遞和返回流,且不能為const 條件狀態 cin word 如果輸入成功,流會保持有效狀態...

c primer 學習筆記22類的建構函式

建構函式是特殊的成員函式,只要建立類型別的新物件,都要執行建構函式。建構函式的工作是保證每個物件的資料成員具有合適的初始值。class sales item private std string isbn unsigned units sold double revenue 建構函式可以被過載 可以...

C Primer學習筆記

學習完乙個知識點後寫上自己的理解。算是總結吧,加深一下自己的印象,也可以在以後複習的時候方便檢視 加油加油!14.1關於運算子的過載 存在的意義 目前看來就是因為操作符大部分是針對資料的,比如int型,char型,書中稱為內建型別。而當類之間想要用操作符的時候,比如兩個類的物件相加,那麼就需要去重 ...