最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2014年04月01日 16:00:01   作者:  
這篇文章主要介紹了拷貝構造函數(shù)防篡改示例,需要的朋友可以參考下

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

復制代碼 代碼如下:

int a = 88;
int b = a;

而類和普通對象不同,類對象內部結構一般較為復雜,存在各種成員變量。

復制代碼 代碼如下:

#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。從以上代碼運行結果可以看出,系統(tǒng)為B分配了內存并完成了對象A的復制過程。

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

復制代碼 代碼如下:

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

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

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

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

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

淺拷貝和深拷貝

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

相關文章

  • Qt數(shù)據(jù)庫應用之實現(xiàn)數(shù)據(jù)打印到紙張

    Qt數(shù)據(jù)庫應用之實現(xiàn)數(shù)據(jù)打印到紙張

    關于Qt打印內容到紙張,網(wǎng)上的辦法非常多,比如有些直接用painter繪制,逐步控制分頁打印。本文介紹的方法則是將內容作為html設置到文檔對象,再調用文檔對象的print方法傳入QPrinter對象打印,感興趣的同學可以了解一下
    2022-01-01
  • C語言中的putchar函數(shù)示例

    C語言中的putchar函數(shù)示例

    putchar函數(shù)函數(shù)幾乎是在整個C語言中最沒有知名度的,它常常被程序員冷漠地對待,這篇文章主要介紹了C語言中的putchar函數(shù),需要的朋友可以參考下
    2022-12-12
  • 基于C++浮點數(shù)(float、double)類型數(shù)據(jù)比較與轉換的詳解

    基于C++浮點數(shù)(float、double)類型數(shù)據(jù)比較與轉換的詳解

    本篇文章是對C++中浮點數(shù)(float、double)類型數(shù)據(jù)比較與轉換進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Java?C++?算法題解leetcode145商品折扣后最終價格單調棧

    Java?C++?算法題解leetcode145商品折扣后最終價格單調棧

    這篇文章主要介紹了Java?C++?算法題解leetcode145商品折扣后最終價格單調棧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • C++與Lua交互內存分配詳解

    C++與Lua交互內存分配詳解

    C/C++ 與 Lua 的交互是通過 lua_State 這一句柄進行交互,我們常規(guī)的創(chuàng)建都是通過 luaL_newstate 這一輔助函數(shù),這篇文章主要給大家詳細介紹了C++與Lua交互內存分配,文中有相關的代碼示例供大家參考,需要的朋友可以參考下
    2023-11-11
  • C語言讀取BMP圖像數(shù)據(jù)的源碼

    C語言讀取BMP圖像數(shù)據(jù)的源碼

    這篇文章主要介紹了C語言讀取BMP圖像數(shù)據(jù)的源碼,需要的朋友可以參考下
    2013-03-03
  • C語言求2的n次方多種方法總結

    C語言求2的n次方多種方法總結

    這篇文章主要給大家介紹了關于C語言求2的n次方多種方法的相關資料,求2的N次冪是一個常用的功能,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • 利用C++實現(xiàn)簡易的.ini配置文件解析器

    利用C++實現(xiàn)簡易的.ini配置文件解析器

    這篇文章主要為大家詳細介紹了如何基于C++編寫一個簡易的.ini配置文件解析器,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2023-03-03
  • c語言++放在前面和后面的區(qū)別分析

    c語言++放在前面和后面的區(qū)別分析

    在C語言中,前綴自增(++i)和后綴自增(i++)操作符并不是同一個操作符,前綴自增操作符的優(yōu)先級高于后綴自增,同時得到的結果并不完全一致,因此需要區(qū)分
    2015-11-11
  • C++ 實戰(zhàn)開發(fā)一個猜單詞的小游戲

    C++ 實戰(zhàn)開發(fā)一個猜單詞的小游戲

    眾所周知紙上得來終覺淺,我們要在實戰(zhàn)中才能真正的掌握技術,小編為大家?guī)硪环萦肅++編寫的猜單詞小游戲,給大家練練手,快來看看吧
    2021-11-11

最新評論

鄂州市| 延安市| 新疆| 北碚区| 萝北县| 屏山县| 河源市| 宾阳县| 文昌市| 吐鲁番市| 仙桃市| 广元市| 公主岭市| 西乡县| 子长县| 色达县| 六盘水市| 太谷县| 徐汇区| 莱阳市| 辛集市| 四平市| 都兰县| 体育| 敦化市| 青州市| 蓝山县| 清流县| 无棣县| 织金县| 桑植县| 礼泉县| 宁波市| 融水| 西峡县| 荣成市| 商南县| 喜德县| 栖霞市| 调兵山市| 洪湖市|