《C primer》第7章 7 3類的其它特性

2021-08-30 22:09:46 字數 1490 閱讀 1425

·類可以自定義某種型別在類中的別名,以此隱藏類的實現細節;區別於普通成員,類的自定義型別的成員必須先定義後使用

·令成員作為內聯函式:在類中定義的函式本身就是內聯的,所以可以不必使用inline,但若使用了inline也是合法的,而類外部定義的函式則需要使用inline說明一下

·可變資料成員:在變數宣告中可以加入mutable關鍵字將之宣告為可變資料成員,乙個可變資料成員永遠不會是const,即使它是const物件(比如說const成員函式)的成員,也仍然是可以改變的

比如說:

class a;

void a::test() const

·當提供乙個類內初始值時,必須以符號=或者花括號{}表示

·返回*this的成員函式返回的是正常的類引用,可以通過這個成員函式的返回值修改類,但是,乙個const成員函式返回的*this則是乙個常量引用,不能通過它修改類

·即使2個類的成員列表完全一致,它們也是不同的型別

比如說struct a;

struct b;

a和b是不相同的型別

·前向宣告:我們可以僅宣告乙個類而不定義它,這種宣告稱為前向宣告,在宣告之後定義之前,它是乙個不完全型別

不完全型別只能在非常有限的情景下才可以使用:可以定義指向這種型別的指標或引用,也可以宣告(但不能定義)以不完全型別作為引數或者返回型別的函式

比如:class a;              //宣告但不定義

void test()

void test1(a a)         //編譯通過

不知道為什麼定義引用會報錯?……此問題待解

對於乙個類來說,我們在使用它前該類必須被定義過,而不能僅僅被宣告,因為僅僅宣告的話,編譯器無法知道這樣的物件需要多少儲存空間

類似的,類也必須被定義,然後才能使用引用或者指標訪問其成員,因為未定義的話編譯器也無法知道該類究竟有哪些成員

·只有當類全部完成後類才算被定義,所以乙個類的成員型別不能是該類自己,但是,一旦乙個類的名字出現後,它就被認為是宣告過了,因此類允許包含指向它自身型別的指標或引用,比如說:

class a;

·類可以指定友元類,友元類的成員函式預設可以訪問此類的包括非公有成員的所有成員,但是,類的友元關係不存在傳遞性,比如說:a是b的友元,b是c的友元,a可以訪問b的所有成員,但不能訪問c的所有成員

·如果乙個類想把一組過載函式宣告成它的友元,則需要對這尊函式中的每乙個函式進行分別宣告,因為儘管過載函式的名字相同,但它們仍然是不同的函式

·在類的內部定義友元函式後,必須在類的外部提供相應的宣告從而使函式可見,因為友元的宣告並非普通意義上的宣告,它不算是乙個宣告

比如:struct x

x()       //錯誤,因為f不算被宣告

void g();      

void h();

};void x::g()         //錯誤,f仍沒有被宣告

void f();           //宣告f

void x::h();        //正確,f被宣告過了

《C Primer》筆記 第7章 類

引入this 引入const成員函式 類作用域和成員函式 在類的外部定義成員函式 定義乙個返回this物件的函式 不能依賴合成的預設建構函式 default的含義 建構函式初始值列表友元的宣告定義乙個型別成員 令成員作為內聯函式 可變資料成員 類資料成員的初始值類的宣告令成員函式作為友元 函式過載和...

C primer學習筆記 第7章

1.形參的初始化與變數的初始化一樣 如果形參具有非引用型別,則複製實參的值,如果形參為引用型別,則它只是實參的別名。2.c中習慣用傳遞指標來實現對實參的訪問。c 中,使用引用形參更安全。3.如果使用引用形參唯一的目的是避免複製形參,則應將形參定義為const引用。4.非const引用形參 只能與完全...

C Primer第5版讀書筆記(第7章 類)

第7章 類 const成員函式 7.1.4 建構函式 預設建構函式,可以使用 default進行定義。和其他函式一樣,如果 default在類的內部,則預設建構函式是內聯的 如果它在類的外部,則該成員預設情況下不是內聯的 7.2 訪問控制與封裝 class與struct的唯一區別為class的預設訪...