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 編寫一段程式讀入兩個字串,比較其是否相等並輸出結果。如果不相等,輸出較大的那個字串。改寫上述程式,比較輸入的兩...