日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

《C++ Primer》13.1.4节练习

發布時間:2023/12/4 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《C++ Primer》13.1.4节练习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

練習13.14:

這是一個典型的應該定義拷貝控制成員的場合。如果不定義拷貝構造函數和拷貝賦值運算符,依賴合成的版本,則在拷貝構造和賦值時,會簡單復制數據成員。對本問題來說,就是將序號簡單復制給新對象。
因此,代碼中對a、b、c三個對象調用函數f,會輸出三個相同的序號——合成拷貝構造函數被調用時簡單復制序號,使得三個對象具有相同的序號。

練習13.15:
在此程序中,都是拷貝構造函數在起作用,因此定義能生成新的序號的拷貝構造函數會改變輸出結果。
但注意,新的輸出結果不是0、1、2,而是3、4、5。
因為在定義變量a時,默認構造函數起作用,將其序號設定為0。當定義b、c時,拷貝構造函數起作用,將它們的序號分別設定為1、2。
但是,在每次調用函數f時,由于參數是numbered類型,又會觸發拷貝構造函數,使得每一次都將形參s的序號設定為新值,從而導致三次的輸出結果是3、4、5。

練習13.16:
會改變輸出結果,新結果是0、1、2。
原因是,將參數改為const numbered &。由于形參類型由類類型變為引用類型,傳遞的不是類對象而是類對象的引用。這意味著調用f時不再觸發拷貝構造函數將實參拷貝給形參,而是傳遞實參的引用。因此,對每次調用,s都是指向實參的引用,序號自然就是實參的序號。而不是創建一個新的對象,獲得一個新序號。

練習13.17:

#include <iostream> using namespace std;class numbered {private:static int seq;public:numbered() {mysn = seq++;}numbered(numbered &n) {mysn = seq++;}int mysn; };int numbered::seq = 0;void f(numbered s) {cout << s.mysn << endl; }int main() {numbered a, b = a, c = b;f(a);f(b);f(c);return 0; }

測試結果:

#include <iostream> using namespace std;class numbered {private:static int seq;public:numbered() {mysn = seq++;}numbered(numbered &n) {mysn = seq++;}int mysn; };int numbered::seq = 0;void f(const numbered &s) {cout << s.mysn << endl; }int main() {numbered a, b = a, c = b;f(a);f(b);f(c);return 0; }

測試結果:

總結

以上是生活随笔為你收集整理的《C++ Primer》13.1.4节练习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。