一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C/C++ - c++拷貝構(gòu)造函數(shù)防篡改示例

c++拷貝構(gòu)造函數(shù)防篡改示例

2021-01-18 10:28C++教程網(wǎng) C/C++

這篇文章主要介紹了拷貝構(gòu)造函數(shù)防篡改示例,需要的朋友可以參考下

對于普通類型的對象來說,他們之間的復制是簡單的,比如:

復制代碼 代碼如下:

int a = 88;
int b = a;

 

而類和普通對象不同,類對象內(nèi)部結(jié)構(gòu)一般較為復雜,存在各種成員變量。

復制代碼 代碼如下:


#include <iostream>
using namespace std;

 

class CExample {
private:
 int a;
public:
     CExample(int b)
 { a=b;}
 void Show ()
 {
        cout<<a<<endl;
    }
};

int main()
{
     CExample A(100);
     CExample B=A;
     B.Show ();
 return 0;
}

 

運行程序,屏幕輸出100。從以上代碼運行結(jié)果可以看出,系統(tǒng)為B分配了內(nèi)存并完成了對象A的復制過程。

就對象而言,相同類型的對象是通過拷貝構(gòu)造函數(shù)來完成整個復制過程的。

復制代碼 代碼如下:

CExample(const CExample& C)
 {
        a=C.a;
 }
 

 

CExample(const CExample& C)就是我們自定義的拷貝構(gòu)造函數(shù)。可見,拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),函數(shù)的名稱必須和類名稱一致,它的唯一的一個參數(shù)是本類型的一個引用變量,該參數(shù)是const類型,不可變的。例如:類X的拷貝構(gòu)造函數(shù)的形式為X(X& x)。

當用一個已初始化過了的自定義類類型對象去初始化另一個新構(gòu)造的對象的時候,拷貝構(gòu)造函數(shù)就會被自動調(diào)用。也就是說,當類的對象需要拷貝時,拷貝構(gòu)造函數(shù)將會被調(diào)用。以下情況都會調(diào)用拷貝構(gòu)造函數(shù):
一個對象以值傳遞的方式傳入函數(shù)體
一個對象以值傳遞的方式從函數(shù)返回
一個對象需要通過另外一個對象進行初始化。

如果在類中沒有顯式地聲明一個拷貝構(gòu)造函數(shù),那么,編譯器將會自動生成一個默認的拷貝構(gòu)造函數(shù),該構(gòu)造函數(shù)完成對象之間的位拷貝。位拷貝又稱淺拷貝,后面將進行說明。

自定義拷貝構(gòu)造函數(shù)是一種良好的編程風格,它可以阻止編譯器形成默認的拷貝構(gòu)造函數(shù),提高源碼效率。

淺拷貝和深拷貝

在某些狀況下,類內(nèi)成員變量需要動態(tài)開辟堆內(nèi)存,如果實行位拷貝,也就是把對象里的值完全復制給另一個對象,如A=B。這時,如果B中有一個成員變量指針已經(jīng)申請了內(nèi)存,那A中的那個成員變量也指向同一塊內(nèi)存。這就出現(xiàn)了問題:當B把內(nèi)存釋放了(如:析構(gòu)),這時A內(nèi)的指針就是野指針了,出現(xiàn)運行錯誤。

深拷貝和淺拷貝可以簡單理解為:如果一個類擁有資源,當這個類的對象發(fā)生復制過程的時候,資源重新分配,這個過程就是深拷貝,反之,沒有重新分配資源,就是淺拷貝。下面舉個深拷貝的例子。

 

復制代碼 代碼如下:


#include <iostream>
using namespace std;
class CA
{
 public:
  CA(int b,char* cstr)
  {
   a=b;
   str=new char[b];
   strcpy(str,cstr);
  }
  CA(const CA& C)
  {
   a=C.a;
   str=new char[a]; //深拷貝
   if(str!=0)
    strcpy(str,C.str);
  }
  void Show()
  {
   cout<<str<<endl;
  }
  ~CA()
  {
   delete str;
  }
 private:
  int a;
  char *str;
};

 

int main()
{
 CA A(10,"Hello!");
 CA B=A;
 B.Show();
 return 0;
}

 

延伸 · 閱讀

精彩推薦
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    strcpy 和strcnpy函數(shù)是字符串復制函數(shù)。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數(shù)使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++深入理解goto語句的替代實現(xiàn)方式分析

    深入理解goto語句的替代實現(xiàn)方式分析

    本篇文章是對goto語句的替代實現(xiàn)方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網(wǎng)7342020-12-03
  • C/C++c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    這篇文章主要介紹了c++ 單線程實現(xiàn)同時監(jiān)聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內(nèi)存中的數(shù)據(jù)都是暫時的,當程序結(jié)束時,它們都將丟失,為了永久性的保存大量的數(shù)據(jù),C語言提供了對文件的操作,這篇文章主要給大家介紹了關(guān)于C語言中文件...

    針眼_6702022-01-24
  • C/C++C/C++經(jīng)典實例之模擬計算器示例代碼

    C/C++經(jīng)典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關(guān)于C/C++經(jīng)典實例之模擬計算器的相關(guān)資料,文中通過示...

    jia150610152021-06-07
  • C/C++C語言實現(xiàn)電腦關(guān)機程序

    C語言實現(xiàn)電腦關(guān)機程序

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)電腦關(guān)機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
主站蜘蛛池模板: 人妖欧美一区二区三区四区 | 久久久免费观看 | 欧美日韩国产另类一区二区三区 | 欧美视频黑鬼大战白妞 | 国产午夜视频在线观看网站 | 成人免费影院 | 免费观看在线 | 国产美女屁股直流白浆视频无遮挡 | 国产片自拍 | 久久亚洲午夜牛牛影视 | 国产成人精品第一区二区 | 国产一级精品高清一级毛片 | 日本在线视频网 | 国色天香社区视频在线观看免费完整版 | 国产在线看片网站 | 亚洲欧美日韩中文字幕网址 | 午夜精品久久久久久久99蜜桃 | 无码精品一区二区三区免费视频 | 国内永久第一免费福利视频 | 亚洲网站在线看 | 久9青青cao精品视频在线 | 高h巨肉play 高h短篇辣肉各种姿势bl | 99热精品在线免费观看 | 91探花在线播放 | 色狠狠成人综合网 | 无人区在线观看免费视频国语 | 亚洲日日操 | 日本免费精品 | 国产一卡二卡3卡4卡四卡在线视频 | 91短视频社区在线观看 | 精品日韩欧美一区二区三区 | 精品在线免费观看 | 免费视频精品一区二区 | 精品人人做人人爽久久久 | 国产重口老太伦 | 国产做a爰片久久毛片 | 国产欧美日韩综合二区三区 | 无限在线观看免费入口 | 虎四免费入口 | 香蕉免费高清完整 | 超兴奋朋友的中文字幕下 |