青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

統計

  • 隨筆 - 44
  • 文章 - 0
  • 評論 - 86
  • 引用 - 0

常用鏈接

留言簿(6)

隨筆分類(31)

隨筆檔案(44)

Mining

最新隨筆

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

C++ 的構造/析構/賦值/拷貝函數比較
構造函數、析構函數與賦值函數是每個類最基本的函數。每個類只有一個析構函數,但可以有多個構造函數(包含一個拷貝構造函數,其它的稱為普通構造函數)和 多個賦值函數(除了同類的賦值以外,還有其他的賦值方法)。對于任意一個類A,如果不想編寫上述函數,C++編譯器將自動為A產生四個缺省的函數,如
A(void);??????????????????? // 缺省的無參數構造函數
A(const A &a);????????????? // 缺省的拷貝構造函數
~A(void);?????????????????? // 缺省的析構函數
A & operate =(const A &a);? // 缺省的賦值函數

有幾個需要注意的內容:
@ 構造函數與析構函數的另一個特別之處是沒有返回值類型
@ 構造從類層次的最頂層的基類開始,在每一層中,首先調用基類的構造函數,然后調用成員對象的構造函數。析構則嚴格按照與構造相反的次序執行,在析構的時候,最低層的派生類的析構函數最開始被調用,然后調用每個基類的析構函數。
@ “缺省的拷貝構造函數”和“缺省的賦值函數”均采用“位拷貝”而非“值拷貝”的方式來實現,倘若類中含有指針變量,這兩個函數注定將出錯

下面通過例子進一步說明,


1.構造函數的初始化表
設存在兩個類:
class?A
{
????…
????A(
void);????????????????//?無參數構造函數
????A(const?A?&other);??????//?拷貝構造函數
????A?&?operate?=(?const?A?&other);??//?賦值函數
????virtual?~A(void);????????//析構函數
};
class?B
{
public:
????B(
const?A?&a);????//?B的構造函數

private:???
????A??m_a;????????????
//?成員對象
};


下面面是B的構造函數的2個實現,其中第一個的類B的構造函數在其初始化表里調用了類A的拷貝構造函數,從而將成員對象m_a初始化;而第二個的B的構造 函數在函數體內用賦值的方式將成員對象m_a初始化。我們看到的只是一條賦值語句,但實際上B的構造函數干了兩件事:先暗地里創建m_a對象(調用了A的 無參數構造函數),再調用類A的賦值函數,將參數a賦給m_a。
B::B(const?A?&a)
?:?m_a(a)
{
???…
}

B::B(
const?A?&a)
{
????m_a?
=?a;
????…
}



2.拷貝函數和構造函數的區別
拷貝構造函數是在對象被創建時調用的,而賦值函數只能被已經存在了的對象調用。
String? a(“hello”);
String? b(“world”);
String? c = a;? // 調用了拷貝構造函數,最好寫成 c(a);
c = b; ?? ??? ??? ?// 調用了賦值函數
本例中第三個語句的風格較差,宜改寫成String c(a) 以區別于第四個語句。

如果我們實在不想編寫拷貝構造函數和賦值函數,又不允許別人使用編譯器生成的缺省函數,可以將拷貝構造函數和賦值函數聲明為私有函數,不用編寫代碼。


3.析構函數與虛析構函數
基類的構造函數、析構函數、賦值函數都不能被派生類繼承。如果類之間存在繼承關系,在編寫上述基本函數時應注意以下事項:
@ 派生類的構造函數應在其初始化表里調用基類的構造函數
@ 基類與派生類的析構函數應該為虛(即加virtual關鍵字)
#include?<iostream>
class?Base
{
public:
????
virtual?~Base()?{?cout<<?"~Base"?<<?endl?;?}
};
class?Derived?:?public?Base
{
public:
????
virtual?~Derived()?{?cout<<?"~Derived"?<<?endl?;?}
};

void?main(void)
{
????Base?
*?pB?=?new?Derived;??//?upcast
???delete?pB;
}


輸出結果為:
?????? ~Derived
?????? ~Base
如果析構函數不為虛,那么輸出結果為
?????? ~Base


進一步參考:
C++/CLI思辨錄之拷貝構造函數
C++類對象的復制-拷貝構造函數
類的構造函數、析構函數與賦值函數

posted on 2006-07-27 18:42 泡泡牛 閱讀(4678) 評論(4)  編輯 收藏 引用

評論

# re: C++ 的構造/析構/賦值/拷貝函數比較 2006-12-15 16:26 fgh

rtydfgfgdfgdstgdfgfyhfghutresfgdsfsdfvxcv
  回復  更多評論    

# re: C++ 的構造/析構/賦值/拷貝函數比較 2007-11-14 00:08 Lv.c

受教
  回復  更多評論    

# re: C++ 的構造/析構/賦值/拷貝函數比較 2008-02-18 13:58 laji1985

哈哈,原來這篇文章就是從樓主提供的第三個鏈接(類的構造函數、析構函數與賦值函數)中扒拉出來的啊~~
謝謝樓主提供的這個超級好鏈接~
  回復  更多評論    

# re: C++ 的構造/析構/賦值/拷貝函數比較 2008-02-18 17:25 泡泡牛

heihei
自己寫的不好, 一些是從其他地方copy 過來的, 所以加上:) 呵呵
  回復  更多評論    
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美多人爱爱视频网站| 亚洲午夜视频在线观看| 久久久久久久999| 国内精品国语自产拍在线观看| 欧美一区二区精美| 欧美专区日韩专区| 18成人免费观看视频| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲伦理在线观看| 亚洲人成网站影音先锋播放| 久久久国产视频91| 亚洲精品日韩在线| 国产精品无码专区在线观看| 久久男人av资源网站| 免费观看一区| 亚洲欧美综合精品久久成人| 久久激情综合| 一本到高清视频免费精品| 亚洲欧美国产视频| 在线免费观看日韩欧美| 亚洲九九爱视频| 国内精品久久久久影院优| 亚洲日本成人| 精品51国产黑色丝袜高跟鞋| 一本色道久久综合亚洲精品不卡| 国产视频在线观看一区二区| 亚洲电影中文字幕| 国产亚洲午夜高清国产拍精品| 亚洲电影有码| 国产最新精品精品你懂的| 亚洲精品免费网站| 激情亚洲一区二区三区四区| 亚洲午夜激情免费视频| 亚洲欧洲一区| 久久久精品国产一区二区三区 | 欧美视频在线视频| 毛片一区二区| 国产精品一区在线观看你懂的| 欧美国产在线电影| 国产一区二区日韩| 亚洲午夜高清视频| 在线亚洲+欧美+日本专区| 你懂的网址国产 欧美| 久久日韩精品| 国产性色一区二区| 亚洲欧美韩国| 亚洲欧美日韩一区二区三区在线观看 | 国产欧美日韩| 一个色综合导航| 99热免费精品| 欧美国产日韩精品| 亚洲高清资源| 亚洲精品美女| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久嫩草精品久久久久| 国产精品乱码一区二区三区| 亚洲人成在线观看一区二区 | 激情婷婷久久| 久久久www免费人成黑人精品| 久久久久久久尹人综合网亚洲| 国产精品久久久久久久久搜平片| avtt综合网| 亚洲在线播放电影| 国产精品美女久久久久久久| 一区二区三区 在线观看视| 亚洲午夜久久久久久尤物| 欧美特黄a级高清免费大片a级| 在线一区视频| 性欧美xxxx视频在线观看| 欧美午夜宅男影院| 亚洲欧洲日韩综合二区| 欧美激情精品久久久久久| 最新日韩欧美| 亚洲视频中文| 国产性天天综合网| 久久午夜精品| 亚洲美女电影在线| 亚洲欧美日韩一区在线| 国产日本欧美在线观看| 久久久久久久久久久久久女国产乱| 欧美jjzz| 亚洲无线视频| 国产一区二区av| 免费观看一区| 亚洲私人影吧| 看欧美日韩国产| 日韩亚洲欧美一区二区三区| 国产精品美女在线观看| 久久国产日韩欧美| 亚洲欧洲偷拍精品| 欧美一级视频精品观看| 亚洲高清在线精品| 欧美日韩免费视频| 久久福利影视| 99视频精品| 久久亚洲视频| 亚洲桃色在线一区| 亚洲高清中文字幕| 国产伦精品免费视频| 免费av成人在线| 亚洲欧美日韩综合| 亚洲精品123区| 久久久久久网站| 亚洲欧美日韩国产一区二区| 亚洲大胆av| 国产日韩欧美一区二区三区在线观看| 免费不卡在线观看| 欧美一区二区视频97| 99riav1国产精品视频| 媚黑女一区二区| 欧美在线免费观看视频| 亚洲视频电影在线| 亚洲日本激情| 一区二区三区在线视频免费观看 | 久久五月天婷婷| 亚洲一区二区三区免费视频| 亚洲国产精品传媒在线观看 | 亚洲欧美日韩在线不卡| 一本大道av伊人久久综合| 亚洲电影视频在线| 欧美成人xxx| 久久精品夜色噜噜亚洲a∨| 亚洲一区二区精品视频| 亚洲人成在线影院| 亚洲国产美国国产综合一区二区| 国产日韩一区在线| 国产精品一区二区三区久久久 | 欧美一级在线播放| 亚洲婷婷在线| 在线综合亚洲欧美在线视频| 亚洲人成网站在线观看播放| 麻豆精品视频在线观看视频| 久久婷婷国产综合国色天香| 久久国产日韩| 久久久欧美精品sm网站| 久久精品日韩欧美| 欧美在线关看| 久久久www成人免费毛片麻豆| 久久夜色精品国产噜噜av| 每日更新成人在线视频| 免费的成人av| 女生裸体视频一区二区三区| 另类欧美日韩国产在线| 久久理论片午夜琪琪电影网| 久久精品国产77777蜜臀| 欧美在线www| 久久高清免费观看| 久久综合精品一区| 欧美成ee人免费视频| 欧美久久电影| 欧美午夜久久| 国产日韩1区| 在线播放豆国产99亚洲| 亚洲韩国日本中文字幕| 亚洲精品资源| 亚洲在线网站| 久久久久国产一区二区| 久久一二三国产| 亚洲国产成人tv| 日韩亚洲国产精品| 欧美在线free| 欧美成人免费小视频| 欧美日韩免费高清| 国产欧美日韩另类视频免费观看| 国产真实久久| 日韩天堂在线视频| 欧美一区国产二区| 欧美成年人在线观看| 亚洲精品久久7777| 亚洲欧美视频一区二区三区| 久久久五月天| 欧美精品日韩一区| 国产日韩欧美另类| 99这里有精品| 久久久久久久欧美精品| 亚洲欧洲三级电影| 欧美在线网站| 欧美日韩三区四区| 国内免费精品永久在线视频| 99re6热在线精品视频播放速度| 欧美一级久久久| 亚洲国产精品一区| 午夜在线一区| 欧美精品www| 国外精品视频| 亚洲一区二区三区视频播放| 久久久噜噜噜久久中文字幕色伊伊 | 一本大道av伊人久久综合| 久久爱另类一区二区小说| 亚洲精品美女免费| 久久久午夜电影| 国产精品女主播一区二区三区| 亚洲电影免费观看高清完整版在线观看 | 国产欧美日韩| 亚洲一区二区精品在线| 亚洲大胆女人| 久久九九国产精品| 国产欧美一区二区三区另类精品| 亚洲免费大片| 欧美二区视频|