C Primer第五版 7 3 2節練習

2021-07-05 07:44:18 字數 3478 閱讀 9420

7.3.2節練習

練習7.27:給你自己的screen類新增move,set和display函式,通過執行下面的**檢驗你的類是否正確。

screen myscreen(5,5,』x』);

myscreen.move(4,0).set(『#』).display(cout);

cout

<< 「\n」;

myscreen.display(cout);

cout

<< 「\n」;

答見雲盤程式 練習7.27.cpp

練習7.28:如果move,set和display函式的返回型別不是screen&而是screen,則在上乙個練習中將會發生什麼情況?

答:上一題中,最終顯示的效果為***************x#***x

如果move,set和display函式的返回型別不是screen&而是screen,則myscreen.move(4,0).set(『#』).display(cout)結果不變

而myscreen.display(cout);

呼叫後相當於改變乙個臨時副本,不能改變myscreen的值,則最終效果為*********************

練習7.29:修改你的screen類,令move,set和display函式返回screen並檢查程式的執行結果,在上乙個練習中你的推測正確嗎?

答:最終結果為

***************x#***x

*********************

見雲盤程式 練習7.29.cpp

練習7.30:通過this指標使用成員的做法雖然合法,但是有點多餘。討論顯示地使用指標訪問成員的優缺點。

答:優點,當乙個類有多個資料成員需要賦值或者拷貝操作,返回*this可以很方便地進行這些操作,使得資料成員可以完成以上操作。乙個const成員函式如果以引用的形式返回*this,那麼它的返回型別將是常量引用。缺點:暫時理解不深,所以總結不出來。

練習7.27

/*

*練習7.27

*日期:2015/7/7

*問題描述:7.3.2節練習

練習7.27:給你自己的screen類新增move,set和display函式,通過執行下面的**檢驗你的類是否正確。

screen myscreen(5,5,'x');

myscreen.move(4,0).set('#').display(cout);

cout << "\n";

myscreen.display(cout);

cout << "\n";

*功能;新增函式

*說明在練習7.23上改動

*//*

*練習7.23

*日期:2015/7/7

*問題描述:練習7.23:編寫你自己的screen類

*功能;寫乙個screen類

*/#include

#include

using

namespace

std;

class screen

char get() const

inline

char get(pos ht, pos wd) const;

screen &move(pos r, pos c);

screen &set(char);

screen &set(pos,pos,char);

screen &display(std::ostream &os)

const screen &display(std::ostream &os) const

private:

pos cursor = 0;

pos height = 0, width = 0;

std::string contents;

void do_display(std::ostream &os) const

}; inline screen& screen::move(pos r, pos c)

char screen::get(pos r, pos c) const

inline screen &screen::set(char c)

inline screen &screen::set(pos r, pos col, char ch)

int main()

練習7.29

/*

*練習7.29

*日期:2015/7/7

*功能;驗證

*說明:在練習7.27上改動

*//*

*練習7.27

*日期:2015/7/7

*問題描述:7.3.2節練習

練習7.27:給你自己的screen類新增move,set和display函式,通過執行下面的**檢驗你的類是否正確。

screen myscreen(5,5,'x');

myscreen.move(4,0).set('#').display(cout);

cout << "\n";

myscreen.display(cout);

cout << "\n";

*功能;新增函式

*說明在練習7.23上改動

*//*

*練習7.23

*日期:2015/7/7

*問題描述:練習7.23:編寫你自己的screen類

*功能;寫乙個screen類

*/#include

#include

using

namespace

std;

class screen

char get() const

inline

char get(pos ht, pos wd) const;

screen move(pos r, pos c);

screen set(char);

screen set(pos,pos,char);

screen display(std::ostream &os)

const screen display(std::ostream &os) const

private:

pos cursor = 0;

pos height = 0, width = 0;

std::string contents;

void do_display(std::ostream &os) const

}; inline screen screen::move(pos r, pos c)

char screen::get(pos r, pos c) const

inline screen screen::set(char c)

inline screen screen::set(pos r, pos col, char ch)

int main()

C Primer第五版 2 4 3節練習

練習2.30 對於下面的這些語句,請說明物件被宣告成了頂層const還是底層const?const int v2 0 v2的值不能被改變,所以這是乙個頂層const int v1 v2 int p1 v1,r1 v1 const int p2 v2 p2存放的是v2的位址,不能間接改變v2的值,但p...

C Primer第五版 2 5 3節練習

練習 2.36 關於下面的 請指出乙個變數的型別以及程式結束時它們各自的值。include int main 練習 2.37 賦值是會產生引用的一類典型表示式,引用的型別就是左值的型別。也就是說,如果i是int,則表示式 i x的型別是int 根據這一特點,請指出下面的 中每乙個變數的型別和值。in...

C Primer第五版 3 2 2節練習

練習3.2 編寫一段程式從標準輸入中一次讀入一整行,然後修改該程式使其一次讀入乙個詞。練習3.3 請說明string類的輸入運算子和getline函式分別是如何處理空白字元的。練習 3.4 編寫一段程式讀入兩個字串,比較其是否相等並輸出結果。如果不相等,輸出較大的那個字串。改寫上述程式,比較輸入的兩...