C++:10---再議拷貝構造函數

一、概念

  • 使用一個已經存在的對象,去構造(初始化)另一個對象

二、格式 

  • 參數加上const&,因為拷貝構造函數在幾種情況下都會被隱式地使用,因此拷貝構造函數不應該是explict的

    • const:防止函數內部修改值

    • &:防止無限循環拷貝

類名(類名 const& 參數名)
{
函數體
}

三、拷貝構造函數的分類

  • 淺拷貝:成員變量無動態內存(指針等)變量時,在拷貝構造函數內對成員變量只做簡單的賦值,不做內存申請

  • 深拷貝:成員變量有動態內存(指針等)變量時,在拷貝構造函數內對成員變量先進行內存申請,然后進行內容拷貝

  • 默認拷貝構造:沒有寫拷貝構造時,系統默認給出(默認的為淺拷貝)

淺拷貝:

//此類情況使用淺拷貝
class Cperson
{
private:
int a;
public:
Cperson(Cperson const& other);//拷貝構造
}
Cperson::Cperson(Cperson const& other)
{
this->a=other.a;
}

深拷貝:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444524.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444524.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444524.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

人的思維謬誤與心理學效應

啟發法 用一個容易的問題代替難以回答的真正問題。這個容易的問題的答案就是對真正問題的啟發,但啟發經常和真正的答案差得很遠,而人卻往往把啟發當成了真正問題的答案。 接下來介紹和啟發法相關的心理效應和謬誤。每一個謬誤都會注明真正的問題是什么…

C++:07---this指針

一、this指針介紹 概念:this指針是成員函數的一個隱式參數,在類中本質上就是對象的指針(常量指針)特點:在成員函數中可通過this指針區別成員變量與形參變量this可以顯式調用示例代碼:class Cperson { private: int age; float height; public: void InitPerson(int age,flo…

Redis :01---Redis簡介和安裝

一、Redis簡介 Redis官網:https://redis.io/ Redis是一種基于鍵值對(key-value)的NoSQL數據庫 與很多鍵值對數據庫不同的是,Redis中的值可以是由string(字符串)、hash(哈希)、 list&…

215. 數組中的第K個最大元素 BFPRT最牛解法

在未排序的數組中找到第 k 個最大的元素。請注意,你需要找的是數組排序后的第 k 個最大的元素,而不是第 k 個不同的元素。 示例 1: 輸入: [3,2,1,5,6,4] 和 k 2 輸出: 5 示例 2: 輸入: [3,2,3,1,2,4,5,5,6] 和 k 4 輸出: 4 說明: 你可以假設 k 總是…

C++: 06---構造函數析構函數

拷貝構造函數: 用一個已經存在的對象來生成一個相同類型的新對象。(淺拷貝)默認的拷貝構造函數: 如果自定義了拷貝構造函數,編譯器就不在生成默認的拷貝構造函數。 如果沒有自定義拷貝構造函數,但在代碼中用到了拷貝構造函數,編譯器會生成默認…

leetcode371. 兩整數之和 不用+號做加法

不使用運算符 和 - ,計算兩整數 ???????a 、b ???????之和。 示例 1: 輸入: a 1, b 2 輸出: 3 示例 2: 輸入: a -2, b 3 輸出: 1 思路:模擬加法器 二進制不考慮進位:000,010,110,是…

C++:05---class和struct

C++被稱為“C with class”,可見在C++中class是多么重要,與class類似的一個結構就是struct了,struct最早是在C語言中出現的,在C++中對struct的功能也進行了擴展。 class : public(公有):在類內外、派生類中都可被訪問protected(保護):希望與派生類共享但是不想被公共…

leetcode34. 在排序數組中查找元素的第一個和最后一個位置

給定一個按照升序排列的整數數組 nums,和一個目標值 target。找出給定目標值在數組中的開始位置和結束位置。 你的算法時間復雜度必須是 O(log n) 級別。 如果數組中不存在目標值,返回 [-1, -1]。 示例 1: 輸入: nums [5,7,7,8,8,10], target 8 輸…

C++:11---友元函數、友元類

一、友元(friend) 概念:通過友元,打破了類的封裝性,可以訪問類內的所有成員分類:友元函數、友元類二、友元函數 概念:友元函數是一個普通函數,不屬于類,但需要在類內表明友元關系 友元函數可訪問類內所有成員,但類不可以訪問友元函數…

leetcode75. 顏色分類

給定一個包含紅色、白色和藍色,一共 n 個元素的數組,原地對它們進行排序,使得相同顏色的元素相鄰,并按照紅色、白色、藍色順序排列。 此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。 注意: 不能使用代碼…

C++:12---運算符重載

一、概念 對已有的運算符重新進行定義,賦予其另一種功能,以適應不同的數據類型重載的運算符是具有特殊名字的函數,該函數也有返回值、參數列表、函數體二、運算符重載的3種實現方式 成員函數:私有、公有、保護都可以友元函數:同上全局函數:只能訪問公有的三、運算符重載的…

Redis:03---Redis的啟動與配置參數大全

一、Redis的可執行文件當我們安裝完Redis之后,src和/usr/local/bin目錄下提供了下面這些可執行程序,我們稱之為Redis Shell:redis-serverRedis服務器redis-cliRedis命令行客戶端redis-benchmarkRedis性能測試工具redis-check-aofRedis AOF持久…

leetcode80. 刪除排序數組中的重復項 II

給定一個排序數組,你需要在原地刪除重復出現的元素,使得每個元素最多出現兩次,返回移除后數組的新長度。 不要使用額外的數組空間,你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。 示例 1: 給定 nums [1,1,1,2…

Redis:04---鍵的基本命令(上)

一、KEYS:全量遍歷鍵KEYS pattern功能:用來獲取此數據庫中所有的鍵名注意事項:KEYS命令需要遍歷Redis中的所有鍵,當鍵的數量較多時會影響性能,不建議在生產環境下使用支持glob風格通配符格式,見下表&#x…

leetcode67. 二進制求和

給定兩個二進制字符串,返回他們的和(用二進制表示)。 輸入為非空字符串且只包含數字 1 和 0。 示例 1: 輸入: a "11", b "1" 輸出: "100" 示例 2: 輸入: a "1010", b "1011" 輸出…

C++:13---繼承(單一繼承、多重繼承、多級繼承、菱形繼承、虛繼承)

一、基類與派生類的概念 基類(父類):在繼承關系中處于上層的類派生類(子類):在繼承關系中處于下層的類class A;class B;class C:public A //C為A的子類,A為C的父類{};class D:public A,public B //D為A和B的子類,A和B均為D的父類{};二、類派生列表 派生類通過派生類列…

(十三) 深入淺出TCPIP之setsockopt參數詳解

在socket編程中我們會經常用到setsockopt這個函數,那么本節我們將對這個函數的參數和使用做說明: 首先看下函數原型: int setsockopt( int socket, int level, int option_name,const void *option_value, size_t ,ption_len); 第…

22種編程語言新年快樂

請允許我用22種編程語言&#xff0c;祝大家新年快樂 C語言&#xff1a;printf(“祝大家新年快樂”); C : cout<<“祝大家新年快樂”; OC: NSLog(“祝大家新年快樂”) QBasic : Print “祝大家新年快樂” Asp : Response.Write “祝大家新年快樂” PHP : echo “祝大家新年…

Redis:05---鍵的基本命令(下) 生存周期

一、設置鍵生存/過期時間生存時間&#xff08;Time To Live&#xff0c;TTL&#xff09;&#xff1a;在經過指定的秒數或者毫秒數之后&#xff0c;服務器就會自動刪除生存時間為0的鍵過期時間&#xff08;expire time&#xff09;&#xff1a;是一個UNIX時間戳&#xff0c;當鍵…

數論基礎代碼合集

歐幾里德 #include<iostream> using namespace std; int hcf(int a,int b) {int r0;while(b!0){ra%b;ab;br;}return(a); } lcd(int u,int v,int h) //ua&#xff0c;vb&#xff0c;h為最小公約數hcf(a,b); {return(u*v/h); } int main() {int a,b,x,y;cin>>…