C primer之第七章 類 3

2021-08-16 18:50:32 字數 3348 閱讀 3970

知識點:

1. 關於inline, inline是一種用於實現的關鍵字,而不是一種「用於宣告的關鍵字」。 inline關鍵字必須與函式定義放在一起才能使函式成為內聯,僅將inline方在函式宣告前不起任何作用。所以inline函式在類體內定義的話直接加inline。如果在類體內宣告,在類外定義,在類外定義出必須加inline關鍵字,而在宣告處為了說明是inline函式可以選擇性加。

2.inline成員函式應該與相應的類定義在同乙個標頭檔案中。

3.題7_27const成員函式的返回型別是const,所以這裡的函式返回型別要加const,不然沒法把乙個const物件繫結到沒有const修飾的變數上。

const

srceen &dispaly(ostream ou)

const

//返回不加const 錯誤

4.即時兩個類的成員列表完全一致,它們也是兩個不同的型別。

5.對於類的宣告(如class a;),我們也可以僅僅宣告類而暫時不定義它; 它向程式說明了該名字是一種類型別,在宣告後定義前該類是個不完全型別,這樣的類只可以:1定義指向該類的指標或引用,2可以宣告(不能定義)以該類為引數型別或返回型別的函式。

而在我們建立該類的物件時必須被定義過。

6. 每個類負責控制自己的友元類或友元函式。

7. 普通的資料和函式成員只能由物件,引用或者指標使用成員訪問運算子來訪問,而對於類型別成員則使用作用域運算子::訪問。

8.乙個類就是乙個作用域,在類的外部,成員的名字被隱藏起來了;當我們在類的外部定義成員函式時必須提供類名和函式名。

9.在類中定義時,先編譯類成員等類全部可現時,在編譯類的成員函式。所以成員函式可以隨意訪問類的成員而不用在意類成員定義的位置。

10.成員函式的變數名字查詢:由內而外,自上向下 。由內而外的順序:1在成員函式內查詢;2若1沒有查到則在類內繼續查詢;3 如果類內也沒有查詢到,在類的之前的作用域查詢。(關於3 若成員函式在類外定義,則按成員函式之前的作用域內查詢。)

11.如果沒有在建構函式的初始值列表中顯示地初始化成員,該成員將在建構函式之前執行預設初始化。有時候我們可以忽略資料成員初始化和賦值之間的差異,但並非總能這樣。如果成員是const或者引用的話,必須將其初始化。我們初始化const或者引用型別的資料成員的唯一機會就是通過建構函式列表初始值。

12. 建構函式初始值列表中成員的初始化順序

取決於它們在類定義中的出現順序,與前後位置無關。

13. 最好令建構函式初始值的順序與成員宣告一致,也盡量避免使用某些成員初始化其他成員。

習題: 7.28 答:導致後面的函式呼叫都是在其前面生成的物件副本上操作,即第二次呼叫diaplay時不會輸出'#'。

7.29 答: 可以看到因為在副本上的操作沒有改變物件本身,所以第二次列印不一樣。

# srceen 返回

'&' ******************xx#***x

******************xx#***x

^^^#不返回 '&'

******************xx#***x

************************x

7.30 答:看個人喜好吧,用this指示明確,不易出錯,不用this**簡短。

7.32 答:

friend

void

window_mgr::clear

(screenindex);

7.33 答:pos 型別無法識別。

screen::pos

screen::size

()const

7.34 答:出錯,pos未定義。

7.35 答:按照知識點10,很好判斷;最後乙個函式的返回型別與返回值型別不匹配,應該在返回型別處加exercise:: 

7.36 答:rem(base%j)初始化時,base還沒定義,出錯修改如下:

struct

x int base, rem;

};7.37 答:(a)第乙個呼叫第三個建構函式;(b)第二個呼叫第乙個建構函式。(c)第三個呼叫第乙個 "9-99..9"重新賦值覆蓋掉0;

7.38 答:sales_add(istream &is = cin)

7.39 答:出錯,無法選擇哪個使用。

7.40 答:(汽車) 資料成員:顏色,品牌,重量,載人量等等。

程式題:

題:7.27(.h)

#include

#include

using

namespace

std;

class

srceen

//將視窗字串的內容全部初始化為『c』

char

get ()

//顯示當前游標處字元

inline

char

get(pos r, pos c)

const

inline

srceen& move(pos , pos);

//移動游標函式

inline

srceen& set(

char);

inline

srceen& set(pos, pos,

char);

//過載輸出函式

srceen &display(ostream &ou)

const

srceen& display(std::ostream& os)

const

private

: pos cursor;

pos height, width;  

// 螢幕的高度和寬度

std::string contents;

void

do_display(ostream& ou)

const;

inline

srceen &srceen::move(pos r, pos c)

inline

srceen& srceen::set(

charc)

inline

srceen& srceen::set(pos r, pos col,

charc)

7.27(.cpp)

#include

"screen2.h"

intmain()

題:7.31

#include

#include

using

namespace

std;

classx

y *yc ;

private:

intx;

inty; };

classy

x xc;

private:

intx;

inty; };

c primer 第七章 類

const更大的作用是可以修飾函式的引數,返回值,定義體。1.用const 修飾函式的引數 如果引數作輸出用,不論它是什麼資料型別,也不論它採用 指標傳遞 還是 引用傳遞 都不能加const修飾,否則該引數將失去輸出功能。const 只能修飾輸入引數 如果輸入引數採用 指標傳遞 那麼加const修飾...

C Primer 第七章 類

成員函式 宣告在類內,定義可內可外,定義在類內則是隱式內聯函式 在成員函式內部,可以直接使用呼叫該函式的物件的成員 類外部定義的成員的名字必須包含所屬類名 this本身是乙個常量指標,預設情況下指向非常量版本 在引數列表後加const可以修改this指向常量型別 編譯器首先編譯成員的宣告,然後才輪到...

C Primer 第七章 類

7.2 訪問控制與封裝 7.2.1 訪問說明符 7.2.2 友元 7.3 類的其他特性 7.4 類的作用域 7.5 建構函式高階 7.6 類的靜態成員 類的基本思想 封裝在成員函式內部,任何對類成員的直接訪問都被看做this的隱式掉用,也就是當我們使用成員變數bookno的時候,實際上隱式的使用了t...