freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

孫鑫vc教程之第06節(jié)補充課件-02-類初始化、賦值、析構(gòu)-資料下載頁

2025-08-04 15:25本頁面
  

【正文】 函數(shù)。按成員是因為初始化的單元是單個非靜態(tài)數(shù)據(jù)成員而不是對整個類對象的按位拷貝 最簡單的按成員初始化的概念模式是,在拷貝構(gòu)造函數(shù)中,每個非靜態(tài)數(shù)據(jù)成員按照聲明的順序被依次初始化。 按成員初始化 “用一個類對象初始化該類的另一個對象”發(fā)生在下列程序情況下: 1.用一個類對象顯式的初始化另一個類對象。 Account newAcct( oldAcct )。 2.把一個類對象作為實參數(shù)傳遞給一個函數(shù)。 CashOnHand( oldAcct )。 3.把一個類對象作為一個函數(shù)的返回值傳遞回來。 Account CashOnHand() { Account FinalAcct。 //do something return FinalAcct。 } 4.非空順序容器類型的定義。 vector sring svec(5)。 //5個 string拷貝構(gòu)造函數(shù)被調(diào)用 5.把一個類對象插入到一個容器類型中。 ( string(“abc”) )。 按成員初始化 考慮到類的安全性和以及用法的正確性,缺省的按成員初始化是不夠的。最經(jīng)常出現(xiàn)的情況是,一個類的數(shù)據(jù)成員是一個指向堆內(nèi)存的指針,并且這塊內(nèi)存由該類的析構(gòu)函數(shù)刪除。另外一種情況是,如果newAcct修改了 _name指向的字符串,則 oldAcct也會受到影響。這種指向錯誤很難被追蹤。 指針“別名”問題的一個解決方案是,分配該字符串的第二個拷貝,并且初始化 這個新的拷貝。為了實現(xiàn)這一點,我們必須改變Accouont類的缺省按成員初始化??梢酝ㄟ^提供一個顯式的拷貝構(gòu)造函數(shù)來做到這一點,由這個拷貝構(gòu)造函數(shù)實現(xiàn)這種正確的初始化語意。 按成員初始化 類的內(nèi)部語義也可能是缺省的按成員初始化無效。例如不能有兩個 Account類對象持有同一賬號,為了保證這一點,我們必須改變 Account的缺省按成員初始化。下面是解決這兩個問題的拷貝構(gòu)造函數(shù): inline Account::Account( const Account amp。rhs ) { // 處理指針別名問題 _name = new char[ strlen()+1 ]。 strcpy( _name, )。 // 處理帳號惟一性問題 _acct_nmbr = get_unique_acct_nmbr()。 // ok: 現(xiàn)在可以按成員拷貝 _balance = 。 } 按成員初始化 除了提供拷貝構(gòu)造函數(shù),一種替代方案就是完全不允許按成員初始化??梢酝ㄟ^下面兩個步驟實現(xiàn): 1.把拷貝構(gòu)造函數(shù)聲明為私有,這可以防止按成員初始化發(fā)生在程序的任何一個地方(類的成員函數(shù)和友員除外)。 2.通過有意不提供一個定義,仍然需要第一步的聲明,可以防止在類的成員函數(shù)和友員中出現(xiàn)按成員初始化。 c++不會阻止類的成員函數(shù)和友員訪問類的任何私有成員。但是通過不提供定義,任何試圖通過調(diào)用拷貝函數(shù)的動作在雖然在編譯系統(tǒng)中是合法的,但是會產(chǎn)生鏈接錯誤,因為無法為它找到可以解析的定義。 按成員初始化 上面的 Account類改寫如下: class Account { public: Account()。 Account( const char*, double= )。 // ... private: Account( const Accountamp。 )。 // ... }。 按成員賦值 缺省的按成員賦值所處理的是,用一個類對象向該類的另外一個對象的賦值操作。其機制基本上與缺省的按成員初始化相同,但是他利用了一個隱式的拷貝賦值操作符來取代拷貝構(gòu)造函數(shù)。例如: newAcct = oldAcct。 在缺省情況下,用 oldAcct相應(yīng)成員的值依次向 newAcct的每個非靜態(tài)成員賦值。在概念上就好像編譯器以及生成了下列拷貝賦值操作符: inline Accountamp。 Account::operator=( const Account amp。rhs ) { _name = 。 _balance = 。 _acct_nmbr = 。 } 按成員賦值 一般來說,如果缺省按成員初始化對于一個類不適合那么缺省按成員賦值也不適合。 當(dāng)一個類對象被賦值給該類的另外一個對象時會發(fā)生下面幾個步驟: 1.檢查該類,判斷他是否提供了一個顯式的拷貝賦值操作符。 2.如果是,在檢查訪問權(quán)限,判斷是否在這個程序部分可以被調(diào)用。 3.如果不能被調(diào)用,則會產(chǎn)生一個編譯錯誤。否則調(diào)用他執(zhí)行賦值操作。 4.如果該類的沒有提供顯式賦值操作符,則執(zhí)行缺省按成員賦值。 5.在缺省按成員賦值下,每個內(nèi)置類型或符合類型的數(shù)據(jù)成員被賦值給相應(yīng)的成員。 6.對于每個類成員對象,遞歸 1到 6步驟,直到所有的內(nèi)置或者符合成員函數(shù)被賦值。
點擊復(fù)制文檔內(nèi)容
物理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1