C++中类的6个默认成员函数
生活随笔
收集整理的這篇文章主要介紹了
C++中类的6个默认成员函数
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
類的6個(gè)默認(rèn)成員函數(shù)
文章目錄
- 類的6個(gè)默認(rèn)成員函數(shù)
- 一、構(gòu)造函數(shù)
- 二、析構(gòu)函數(shù)
- 三、拷貝構(gòu)造函數(shù)
- 四、運(yùn)算符重載
- 五、取地址操作符重載和const修飾的去地址操作符重載
一、構(gòu)造函數(shù)
- 構(gòu)造函數(shù):是一個(gè)特殊的成員函數(shù),名字與類名相同,創(chuàng)建對(duì)象時(shí)由編譯器自動(dòng)調(diào)用,保證每個(gè)成員函數(shù)都有一個(gè)初值,
- 注意,構(gòu)造函數(shù)只是給類成員賦了一個(gè)初值,并不能稱為給類成員進(jìn)行初始化,因?yàn)槌跏蓟荒苡幸淮?#xff0c;而構(gòu)造函數(shù)可以進(jìn)行多次賦值,并且在對(duì)象生命周期內(nèi)只調(diào)用一次,沒(méi)有返回值。
- 初始化列表:是初始化類中每個(gè)變量,如果類成員包含引用類型成員變量、const成員變量、類類型成員變量(改類沒(méi)有默認(rèn)構(gòu)造函數(shù))則這些成員變量必須放在初始化列表位置進(jìn)行初始化,另外,每個(gè)成員變量只能在初始化列表出現(xiàn)一次。
注意:
- 函數(shù)名必須和類名相同;
- 無(wú)返回值;
- 構(gòu)造函數(shù)可以重載;
- 構(gòu)造函數(shù)的作用是初始化對(duì)象,并不是開(kāi)空間創(chuàng)建對(duì)象;
- 如果類中沒(méi)有顯式定義構(gòu)造函數(shù),編譯器會(huì)自動(dòng)生成一個(gè)默認(rèn)無(wú)參數(shù)的構(gòu)造函數(shù),一旦用戶顯式定義,編譯器就不再生成;
- 無(wú)參數(shù)的構(gòu)造函數(shù)和全缺省的構(gòu)造函數(shù)都稱為默認(rèn)的構(gòu)造函數(shù),并且默認(rèn)的構(gòu)造函數(shù)只能有一個(gè),(我們沒(méi)有顯式定義構(gòu)造函數(shù),編譯器默認(rèn)生成的構(gòu)造函數(shù),都可以認(rèn)為是默認(rèn)成員函數(shù))
二、析構(gòu)函數(shù)
- 析構(gòu)函數(shù):與構(gòu)造函數(shù)功能相反,注意析構(gòu)函數(shù)不是完成對(duì)象的銷毀,局部對(duì)象的銷毀是由編譯器完成的,而對(duì)象在銷毀前,會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù),完成一些對(duì)象的資源清理工作。
注意:
- 構(gòu)造函數(shù)名是在類名前加~符號(hào);
- 無(wú)參數(shù)無(wú)返回值,就沒(méi)有函數(shù)重載;
- 一個(gè)類有且只有一個(gè)析構(gòu)函數(shù),若未顯式定義,編譯器會(huì)默認(rèn)生成一個(gè);
- 在對(duì)象生命周期結(jié)束時(shí),編譯器系統(tǒng)自動(dòng)調(diào)用析構(gòu)函數(shù)
三、拷貝構(gòu)造函數(shù)
- 拷貝構(gòu)造函數(shù):用已存在類類型對(duì)象創(chuàng)建新對(duì)象時(shí)由編譯器自動(dòng)調(diào)用,只有單個(gè)類類型引的型參,且一般用const修飾。(注意深淺拷貝問(wèn)題,會(huì)在后面解決)
注意:
- 拷貝構(gòu)造函數(shù)是構(gòu)造函數(shù)的重載形式;
- 參數(shù)必須使用引用傳參,使用按值傳參,會(huì)引發(fā)無(wú)窮遞歸調(diào)用進(jìn)行創(chuàng)建臨時(shí)對(duì)象;
- 最最重要的是:如果未顯示定義拷貝構(gòu)造函數(shù),系統(tǒng)會(huì)默認(rèn)生成按值傳參的拷貝構(gòu)造函數(shù),即淺拷貝或值拷貝
四、運(yùn)算符重載
- 運(yùn)算符重載:是為了加強(qiáng)代碼的可讀性而引入的,運(yùn)算符重載是具有特殊函數(shù)名的函數(shù),有參數(shù)有返回值;
- 對(duì)于賦值運(yùn)算符重載問(wèn)題:一個(gè)類中一旦涉及資源管理問(wèn)題,用戶必須顯式定義賦值運(yùn)算符重載(注意深淺拷貝問(wèn)題)。函數(shù)原型為:返回值類型 operator 要重載的操作符 (參數(shù))
注意:
- 不能通過(guò)鏈接其他符號(hào)來(lái)創(chuàng)建新的操作符,如operator@;
- 重載操作符必須有一個(gè)類類型的或枚舉類型的操作數(shù);
- 并且不能隨意更改內(nèi)置類型的操作符的含義;
- 作為類成員的重載函數(shù)時(shí),形參看起來(lái)比操作數(shù)數(shù)目少一個(gè),其實(shí)是有一個(gè)默認(rèn)的形參this作為第一個(gè)參數(shù);
- 最最最最最重要的是".*"、"sizeof"、"?:"、"."、"::"五個(gè)運(yùn)算符不能重載
- 還有注意前置++(不帶參數(shù))、后置++(帶一個(gè)參數(shù))和=運(yùn)算符的重載
五、取地址操作符重載和const修飾的去地址操作符重載
- 取地址操作符重載和const修飾的取地址操作符重載:一般不用重新定義,編譯器會(huì)默認(rèn)生成
簡(jiǎn)單歸納:
| 構(gòu)造函數(shù) | 無(wú)返回值 | 有參和無(wú)參兩種 | 初始化對(duì)象 |
| 析構(gòu)函數(shù) | 無(wú)返回值 | 無(wú)參數(shù) | 對(duì)象生命周期結(jié)束時(shí),在對(duì)象刪除前做清理工作 |
| 拷貝構(gòu)造函數(shù) | 無(wú)返回值 | 引用類型的參數(shù) | 用已存在的對(duì)象創(chuàng)建新的對(duì)像 |
| 運(yùn)算符重載 | 不定 | 至少有一個(gè) | 方便C++中的操作 |
還有兩個(gè)默認(rèn)成員函數(shù)一般不用重新定義(取地址操作符重載和const修飾的去地址操作符重載)
注意:
- 1:const對(duì)象可以調(diào)用其他的const成員函數(shù),而不能調(diào)用非const成員函數(shù)。
- 2.非const對(duì)象既可以調(diào)用const成員函數(shù)也可以調(diào)用非const成員函數(shù)。
- 3.const成員函數(shù)可以調(diào)用其他的const成員函數(shù),而不能調(diào)用非const成員函數(shù)。
- 4.非const成員函數(shù)既可以調(diào)用其他的const成員函數(shù),也可以調(diào)用非const成員函數(shù)。
總結(jié)
以上是生活随笔為你收集整理的C++中类的6个默认成员函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 高精度加法(非负)和大数阶乘及和汽水问题
- 下一篇: C和C++中static的用法及友元