C Primer 第五版 13 3節練習

2021-09-11 23:19:08 字數 1517 閱讀 3001

13.29    swap(hasptr&, hasptr&)函式中調換的ps和i都是內建型別,會呼叫標準庫std::swap,不會導致遞迴迴圈。

13.30    **如下(operator=用swap實現):

#include #include #include #include using namespace::std;

class hasptr

hasptr(const hasptr &p):

ps(new string(*p.ps)), i(p.i), use(p.use)

hasptr& operator=(hasptr);

void str()

~hasptr();

private:

string *ps;

int i;

size_t *use;

};inline

void swap(hasptr &lhs, hasptr &rhs)

hasptr&

hasptr::operator=(hasptr rhs)

hasptr::~hasptr()

}int main(int argc, char *ar**)

13.31 **如下:

#include #include #include #include using namespace::std;

class hasptr

hasptr(const hasptr &p):

ps(new string(*p.ps)), i(p.i), use(p.use)

hasptr& operator=(hasptr);

bool operator<(const hasptr&);

void str()

~hasptr();

private:

string *ps;

int i;

size_t *use;

};inline

void swap(hasptr &lhs, hasptr &rhs)

hasptr&

hasptr::operator=(hasptr rhs)

bool

hasptr::operator<(const hasptr &rhs)

hasptr::~hasptr()

}int main(int argc, char *ar**)

; for (auto h : hv)

h.str();

cout << "sort "<< endl;

sort(hv.begin(), hv.end());

for (auto h : hv)

h.str();

return 0;

}

13.32    類指標版本的hasptr也會從swap收益,如上2題的**所示,其賦值運算子也可以用swap來定義,無需處理use,因為二者互換後引用計數不變,都是先減1後加1。

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