三 類的複製(C )

2021-10-09 13:19:35 字數 2397 閱讀 6814

內容參考於《21天學通c++》(第八版)

不去糾結c++的原理和細節,從c的角度去學習c++,再通過c++專案去加深理解

1. 示例1-淺複製及其存在的問題
#include

#include

using

namespace std;

class

mystring}~

mystring()

// destructor

intgetlength()

const

char

*getstring()

};void

usemystring

(mystring str)

intmain()

執行結果-程式退出main後崩潰了。

再進入usemystring(sayhello),sayhello變成了形參,可是buffer指的資料是真實的,退出usemystring時,形參銷毀,把buffer也銷毀了。退出main,導致無東西可銷毀。

2. 示例2-使用複製建構函式確保深複製

#include

#include

using

namespace std;

class

mystring

}mystring

(const mystring& copysource)

// copy constructor

}// destructor

~mystring()

intgetlength()

const

char

*getstring()

};void

usemystring

(mystring str)

intmain()

執行結果

default constructor: creating new mystring

buffer points to: 0x01232d90

copy constructor: copying from mystring

buffer points to: 0x01232dd8

string buffer in mystring is 17 characters long

buffer contains: hello from string class

invoking destructor, clearing up

invoking destructor, clearing up

當類被複製時,會自動呼叫mystring(const mystring& copysource)進行構造,在這裡可以進行深度複製strcpy(buffer, copysource.buffer)

3. 示例3-賦值複製

如果 例項=例項,那該怎麼辦?那麼需要運算子過載,實現以下方法,當該類遇到=,都會執行裡面內容。

mystring::

operator=(

const mystring& copysource)

4. 其他注意
mystring

(const mystring& copysource)

5. 隱式轉換
class

human};

// function that takes a human as a parameter

void

dosomething

(human person)

這個類能夠執行

human kid(10

);dosomething

(kid)

;human anotherkid =11;

// 型別明顯異常

dosomething(10

);// 型別明顯異常

函式 dosothing(human person)被宣告為接受乙個 human(而不是 int)引數!前面的**為何可行呢?這是因為編譯器知道 human 類包含乙個將整數作為引數的建構函式, 進而替您執行了隱式轉換:將您提供的整數作為引數傳送給這個建構函式,從而建立乙個human 物件。為避免隱式轉換,可在宣告建構函式時使用關鍵字 explicit:

class

human

};

並非必須使用關鍵字 explicit,但在很多情況下,這都是一種良好的程式設計實踐。

6.不允許複製的類

class

president

;

三類MySQL MySQL常用的三類函式

經常編寫程式或者使用資料庫的同學一定體會到函式的重要性,豐富的函式往往能使使用者的工作事半功倍。函式能幫助使用者做很多事情,比如說字串的處理 數值的運算 日期的運算等,在這方面mysql提供了多種內建函式幫助開發人員編寫簡單快捷的sql語句,其中常用的函式有字串函式 日期函式和數值函式。1 字串函式...

C 入門 三 類的轉換

c 的內部資料型別遵循隱式型別轉換規則。假設某個表達市中使用了乙個短整型變數,而編譯器根據上下文認為這兒需要是的長整型,則編譯器就會根據型別轉換規則自動把它轉換成長整型,這種隱式轉換出現在賦值 引數傳遞 返回值 初始化和表示式中。我們也可以為類提供相應的轉換規則。對乙個類建立隱式轉換規則需要構造乙個...

C 複習三 類的繼承

繼承中的一些問題 多繼承虛基類 繼承總結 繼承 自動從另一種事物獲取部分或全部的屬性和能力 繼承提高了 的可重用性 class 子類名 public protected private 父類名子類繼承父類的所有內容,包括私有屬性 只是我們看不到 public protected private pu...