C 回顧之類

2021-08-16 06:22:30 字數 2311 閱讀 7282

定義在類內部的函式是隱式的inline函式。

常量成員函式:預設情況下隱式的this的型別是指向類型別非常量版本的常量指標,即自身是常量,但是指向的物件不是常量,為了使得this能繫結到乙個常量物件(如const),則在函式後面加上const。但是這樣子就不可以改變呼叫它的物件的資料成員。

#include 

using

namespace

std;

class text

//必須宣告為const,否則main函式沒辦法呼叫這個成員函式。

int getscore() const

};int main()

編譯器首先編譯成員的宣告,再編譯成員函式體。所以無須在意順序。

建構函式:用於初始化類物件的資料成員。建構函式不可以宣告為const。

不顯示提供建構函式,則按預設建構函式來初始化

如果有類內初始值,用它來初始化成員。

否則,預設初始化該成員。

只有類沒有宣告任何建構函式時,編譯器才會自動生成預設建構函式。所以,如果乙個類在某種情況下需要控制物件初始化,則需要控制所有情況。一般來說,對於乙個類一定要定義自己的預設建構函式。

建構函式:

sales_data() = default; // c++11,編譯器生成預設建構函式。

//建構函式初始值列表,當某個成員不在初始化列表時,會執行預設建構函式(先看類內初始值,沒有再預設初始化)

sales_data(const

std:string & s):bookno(s)

c++的建構函式中是能夠呼叫其他成員函式的。

建構函式也是成員函式;

當執行建構函式的時候,物件的資料成員的記憶體已經分配完成;

因此建構函式是能夠呼叫其他函式的。

在在成員函式內呼叫建構函式, 都只能是產生乙個無名物件,並不會對原有物件的成員值造成影響。若在建構函式內呼叫建構函式,除了是在初始化列表中,或是編譯器自動合成的(父類的或類成員的)建構函式,也不會改變該物件的成員變數的值。因此在成員函式中不要呼叫建構函式。

友元:目的是讓該類可以訪問當前類的非公有成員。最好在類開始或結束前集中宣告友元。

可以在類中自定義某種型別在類中的別名,這也存在訪問限制,該成員必須先定義後使用。

內聯函式inline可以在宣告或定義處使用, 也可以同時使用,不過最好在定義處用。inline成員函式應該放在標頭檔案中。

可變資料成員:mutable size_t access_ctr加上了mutable之後,這個變數永遠不會是const, 即使是const物件的成員也可改變,乙個const成員函式也可以改變這個物件的值。

當我們提供乙個類內初始值時,必須以符號=或花括號表示。

乙個const成員函式如果以引用的方式返回*this,那麼這個返回型別就是乙個常量引用,則可能無法用來呼叫其他非const成員函式。

可以同時宣告常量版本和非常量版本的成員函式,這時候會選擇最佳匹配的。

類也可以先進行宣告而不定義,這種宣告叫做前向宣告。宣告之後定義之前是乙個不完全型別。

類中的資料成員不能是這種類本身,但可以是指向這個類的指標或引用。

友元關係不具有傳遞性。可以讓某個類或某個類的成員函式成為我這個類的友元。這個時候要注意類的宣告和定義順序。

要宣告過載的多個函式為友元,則要分別獨自宣告。

友元宣告和作用域:252頁。友元函式可以在類裡面定義,但在外面也同時還要宣告。類裡面定義的友元函式隱式內聯。

不使用建構函式初始值列表,而是在建構函式體內賦值,則執行的是賦值操作而不是初始值操作。

如果成員是const,引用,或者某種未提供預設建構函式的類型別,我們必須通過建構函式初始值列表為這些成員提供初值。

成員的初始化順序與類中定義順序一一致,與建構函式初始值列表順序無關。盡量避免用某些成員初始化其他成員。

建構函式也可以用預設引數的方法。

委託建構函式:當乙個建構函式委託給另乙個建構函式時,受委託的建構函式的初始值列表和函式體被依次執行。假如受委託的函式體包含有**的話,將執行這些**,然後控制權才會交還給委託者的函式體。

類型別轉換和聚合類

靜態成員函式不能使用const,函式體內也不能使用this指標。

靜態成員是整個類共享的,可以通過作用域運算子::直接使用,也可以通過物件或指標來訪問。成員函式可以直接使用靜態成員。

在類的外部定義靜態成員時,不可以重複static關鍵字。靜態資料成員不是由建構函式初始化的。靜態資料成員要在類外定義,並且通過::運算子即可直接訪問到私有靜態資料成員,同時也可以呼叫私有靜態函式來定義私有靜態資料成員(270頁)。

靜態資料成員的類內初始化。

C 基礎之類

具有某種身份的事物就是物件 在應用領域中有意義的 與所要解決的問題有關係的任何事物都可以作為物件,它既可以是具體的物理實體的抽象,也可以是人為的概念,或者是人和有明確邊界和意義的東西。任何事物都可以用物件來進行描述 萬物皆物件。物件是一組資料以及對這組資料有關操作組合封裝的實體,這組資料也可以稱為物...

C 之類繼承

主要探索 1 派生類對基類protecteed public private三種資料訪問 和這三種繼承方式比較。2 派生類包含子物件。3 子類包含建構函式。通過public方式繼承 具體示例 include include using namespace std 定義基類 class people ...

C 之類繼承

成員訪問控制 在c 中,類的成員訪問控制分為公有public,保護protected,私有private。其訪問許可權物件分為類成員函式和使用者 類的例項化或物件 派生類後面討論。不管是公有,保護還是私有,自身類的成員函式都可以直接訪問 自身類 是為了區分後面的派生類 但是使用者 類的物件 只能訪問...