程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 讀《C++沉思錄》心得:拷貝構造函數

讀《C++沉思錄》心得:拷貝構造函數

編輯:C++入門知識

讀《C++沉思錄》心得:拷貝構造函數

  num= VehicleSurrogate parking_lot[  parking_lot[num++]=  

 

  書上是這麼解釋上面這段的:

  •   “這個語句創建了一個關於對象x的副本,並將VehicleProxy對象綁定到該副本,然後將這個對象賦值給parking_lot的一個元素。當最後銷毀parking_lot數組時,所有這些副本也被清除。”

  對於書上的這段解釋,我可以理解它是解釋代碼中的第6行,但是完全不能理解它可以解釋第4行。對於第4行,我的理解是:它調用了拷貝構造函數。之後我就在網上搜索了一下拷貝構造函數的使用,於是得出如下三處使用拷貝構造函數的地方:

  而拷貝構造函數三處所使用的地方,都不能說是此時代碼第4句的這種情形。就算是那也只能說第4句它肯定調用了拷貝構造函數,並且它使用的是拷貝構造函數使用情況的第三種情況。但是那個“=”是怎麼回事呢,帶著這種疑惑我決定親自寫代碼測試一下,看能不能發現什麼。

  以下為我將《C++沉思錄》中的這段代碼的例子簡易寫下來為了測試的代碼:

 //Vehicle.h 
1 #include<iostream> Vehicle* copy() = ~ cout<<<< };
 //Automobile.h
1 #include<vehicle.h> #include<iostream> Automobile : Vehicle* copy() ~ };
 //Automobile.cpp
1 #include cout<<<< Vehicle *Automobile::copy() cout<<<< Automobile(* Automobile::~ cout<<<< }
 //VehicleSurrogate.h
1 #include #include<iostream> VehicleSurrogate( Vehicle& VehicleSurrogate( VehicleSurrogate& VehicleSurrogate&=( VehicleSurrogate& ~ Vehicle * };
 //VehicleSurrogate.cpp
1 #include VehicleSurrogate::VehicleSurrogate():vp( cout<<<< VehicleSurrogate::VehicleSurrogate( Vehicle &v) vp= cout<<<< VehicleSurrogate::VehicleSurrogate( VehicleSurrogate & v):vp(v.vp?v.vp->copy(): cout<<<< VehicleSurrogate &VehicleSurrogate:: =( VehicleSurrogate & cout<<<< (!=& vp=(v.vp?v.vp->copy(): * VehicleSurrogate::~ cout<<<< }
 1 #include <iostream>
 #include
 #include
 #include
   
        num=     VehicleSurrogate parking_lot[      parking_lot[num++]=     
 
       }

  通過對上面代碼的運行,得出運行結果如下圖1:

  由運行結果的第5,6,7,8行可以看出,在調用“

  而將上面這句“parking_lot[num++]=x”換為“parking_lot[num++]=VehicleSurrogate(x)”時,執行的效果是一樣的,見下圖2:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved