亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

詳解c++類構造函數

2020-02-24 14:28:57
字體:
來源:轉載
供稿:網友

在C++中,有一個特殊的成員函數,其名稱和類名是相同的,它不需要來自用戶的顯式調用,而是在創建對象時自動執行,本文是武林技術頻道小編給大家帶來的詳解c++類構造函數,一起來看看吧!

?

//一、 構造函數是干什么的

?

/*?? 類對象被創建時,編譯系統對象分配內存空間,并自動調用該構造函數->由構造函數完成成員的初始化工作
???? eg: Counter c1;

???? 編譯系統為對象c1的每個數據成員(m_value)分配內存空間,并調用構造函數Counter( )自動地初始化對象,初始化之后c1的m_value值設置為0

???? 故:構造函數的作用:初始化對象的數據成員。*/

????? class Counter
?????? {
????? public:?????? // 類Counter的構造函數,以類名作為函數名,無返回類型
????? Counter(){
????? m_value = 0;
????? }

????? private:
????? int m_value;? // 類私有的數據成員
????? }

?

//二、 構造函數的種類

#include <iostream>
using namespace std;

class Complex
{
private :
??? double m_real;
??? double m_imag;

public:

//*無參數構造函數

// 如果創建一個類你沒有寫任何構造函數,則系統會自動生成默認的無參構造函數,函數為空,什么都不做
// 只要你寫了一個下面的某一種構造函數,系統就不會再自動生成這樣一個默認的構造函數,如果希望有一個這樣的無參構造函數,則需要自己顯示地寫出來

??? Complex(void)
??? {?? m_real = 0.0;
??????? m_imag = 0.0;
??? }

//*一般構造函數(也稱重載構造函數)

//一般構造函數可以有各種參數形式,一個類可以有多個一般構造函數,前提是參數的個數或者類型不同(基于c++的重載函數原理)

//例如:你還可以寫一個 Complex(int num)的構造函數出來,創建對象時根據傳入的參數不同調用不同的構造函數

??? Complex(double real, double imag)
??? {?? m_real = real;
??????? m_imag = imag;
??? }

//*復制構造函數(也稱為拷貝構造函數)

//復制構造函數參數為類對象本身的引用,用于根據一個已存在的對象復制出一個新的該類的對象,一般在函數中會將已存在對象的數據成員的值復制一份到新創建的對象中

//若沒有顯示的寫復制構造函數,則系統會默認創建一個復制構造函數,但當類中有指針成員時,由系統默認創建該復制構造函數會存在風險,具體原因在有關 “淺拷貝”、“深拷貝”的文章中論述

??? Complex(const Complex & c)
??? {?? // 將對象c中的數據成員值復制過來
??????? m_real = c.m_real;
??????? m_imag = c.m_imag;
??? }

//*類型轉換構造函數,根據一個指定的類型的對象創建一個本類的對象,需要注意的一點是,這個其實就是一般的構造函數,但是對于出現這種單參數的構造函數,C++會默認將參數對應的類型轉換為該類類型,

//有時候這種隱私的轉換是我們所不想要的,所以需要使用explicit來限制這種轉換。

//例如:下面將根據一個double類型的對象創建了一個Complex對象

??? Complex(double r)
??? {?? m_real = r;
??????? m_imag = 0.0;
??? }

// 等號運算符重載(也叫賦值構造函數)

// 注意,這個類似復制構造函數,將=右邊的本類對象的值復制給等號左邊的對象,它不屬于構造函數,等號左右兩邊的對象必須已經被創建。

// 若沒有顯示的寫 =運算符重載,則系統也會創建一個默認的=運算符重載,只做一些基本的拷貝工作

??? Complex &operator=(const Complex &rhs )

??? {?? // 首先檢測等號右邊的是否就是左邊的對象本身,若是本對象本身,則直接返回
??????? if ( this == &rhs )
??????? {?? return *this;
??????? }

??????? // 復制等號右邊的成員到左邊的對象中
??????? this->m_real = rhs.m_real;
??????? this->m_imag = rhs.m_imag;

??????? // 把等號左邊的對象再次傳出,目的是為了支持連等 eg:a=b=c 系統首先運行 b=c 然后運行 a=(b=c的返回值,這里應該是復制c值后的b對象)
??????? return *this;
??? }
};

//三、使用上面定義的類對象來說明各個構造函數的用法:

int main()
{??
??? // 調用了無參構造函數,數據成員初值被賦值為0.0
??? Complex c1,c2;

??? // 調用一般構造函數,數據成員初值分別被賦為指定值
??? Complex c3(1.0,2.5);

??? // 當然,也可以使用下面的形式
??? // Complex c3 = Complex(1.0,2.5);

??? //? 把c3的數據成員的值賦值給事先被創建的對象c1
??? //? 由于c1已經事先被創建,故此處不會調用任何構造函數
??? //? 只會調用 = 號運算符重載函數
??? c1 = c3;?

??? //? 調用類型轉換構造函數
??? //? 系統首先調用類型轉換構造函數,將5.2創建為一個本類的臨時對象,然后調用等號運算符重載,將該臨時對象賦值給c2
??? c2 = 5.2;?

??? // 調用拷貝構造函數( 有下面兩種調用方式)

??? Complex c5(c3);
??? Complex c4 = c3;

??? // 注意和 =運算符重載的區分,這里等號左邊的對象不是事先已經創建,故需要調用拷貝構造函數,參數為c2
??? // 這一點特別重要,這兒是初始化,不是賦值。
??? // 其實這兒就涉及了C++中的兩種初始化的方式:復制初始化和賦值初始化。
??? // 其中c5采用的是復制初始化,而c4采用的是賦值初始化,這兩種方式都是要調用拷貝構造函數的。

}

以上就是關于詳解c++類構造函數的內容了,你學會了嗎?建議你可以收藏這篇文章,相信對于你的編程之路是有著很大好處的,更多的知識你可以來武林技術頻道學習。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日本啪啪无遮挡网站| 色午夜这里只有精品| 成人乱人伦精品视频在线观看| 亚洲人成网站999久久久综合| 国产成人精品在线观看| 欧美男插女视频| 久久免费少妇高潮久久精品99| 欧美劲爆第一页| 国产99久久精品一区二区 夜夜躁日日躁| 中文字幕综合在线| 久久久久久久色| 欧美在线视频a| 亚洲电影成人av99爱色| 国产日韩av在线播放| 欧美一级电影久久| 久久免费观看视频| 91视频免费网站| 久久夜色精品国产| 成人国产亚洲精品a区天堂华泰| 91在线中文字幕| 欧亚精品在线观看| 亚洲加勒比久久88色综合| 亚洲女同精品视频| 国产精品大陆在线观看| 黑人狂躁日本妞一区二区三区| 日韩精品中文字幕在线观看| 国产剧情日韩欧美| 亚洲欧美中文日韩在线v日本| 一本色道久久88亚洲综合88| 97**国产露脸精品国产| 亚洲日本中文字幕免费在线不卡| 国产精品亚洲自拍| 国产成人精品a视频一区www| 欧美日韩福利电影| 欧美裸体xxxx| 韩国欧美亚洲国产| 亚洲乱码一区av黑人高潮| 91麻豆国产语对白在线观看| 日韩国产一区三区| 最近中文字幕mv在线一区二区三区四区| 亚洲自拍偷拍在线| 亚洲第一网站男人都懂| 91免费视频网站| 久久精品国产2020观看福利| 欧美电影免费在线观看| 一区二区三区高清国产| 国产精品美女久久久免费| 欧美激情视频播放| 中文字幕亚洲国产| 欧美性猛交xxxx富婆弯腰| 国产美女精彩久久| 欧美一级高清免费播放| 欧美重口另类videos人妖| 亚洲成人久久一区| 精品一区二区三区四区| 亚洲在线免费视频| 日韩有码在线观看| 亚洲精品美女在线| 精品亚洲一区二区三区在线观看| 中文字幕精品在线| 国产欧美亚洲视频| 国产偷亚洲偷欧美偷精品| 亚洲专区中文字幕| 九九九热精品免费视频观看网站| 国产91在线高潮白浆在线观看| 亚洲国产精久久久久久久| 精品国产网站地址| 另类专区欧美制服同性| 成人精品视频99在线观看免费| 日韩中文字幕国产精品| 亚洲最大av在线| 91禁国产网站| 美日韩精品视频免费看| 国产精品专区h在线观看| 26uuu另类亚洲欧美日本一| 日韩乱码在线视频| 日韩国产中文字幕| 国产99视频在线观看| 91香蕉国产在线观看| 日韩在线免费高清视频| 亚洲免费人成在线视频观看| 国产日韩欧美中文在线播放| 日韩精品在线免费观看视频| 欧美一级淫片aaaaaaa视频| 久久久久久久国产| 亚洲精品中文字幕有码专区| 日韩精品在线影院| 69影院欧美专区视频| 亚洲精品小视频| 国产精品日韩在线一区| 国产精品扒开腿做爽爽爽的视频| 欧美日韩亚洲精品一区二区三区| 91精品国产乱码久久久久久蜜臀| 国产精品夜色7777狼人| 国产日韩欧美中文| 久久夜色精品亚洲噜噜国产mv| 亚洲精品视频播放| 国产精品日日摸夜夜添夜夜av| 亚洲色图综合网| 国产xxx69麻豆国语对白| 色综合视频网站| 色哟哟亚洲精品一区二区| 在线视频精品一| 国产精品第8页| 亚洲色图五月天| 亚洲大胆人体av| 亚洲精品98久久久久久中文字幕| 亚洲无亚洲人成网站77777| 国产精品偷伦一区二区| 国产精品自产拍高潮在线观看| 俺去亚洲欧洲欧美日韩| 精品福利樱桃av导航| 国产精品视频专区| 国产一区二区欧美日韩| 欧美又大又粗又长| 78色国产精品| 精品偷拍各种wc美女嘘嘘| 久久综合伊人77777蜜臀| 成人精品一区二区三区电影免费| 成人激情在线播放| 91亚洲人电影| 动漫精品一区二区| 久久久之久亚州精品露出| 热99久久精品| 久久精品视频99| 国产精品一区电影| 亚洲免费一在线| 欧美日韩人人澡狠狠躁视频| 亚洲精品国产品国语在线| 久久久久久久国产精品视频| 国产精品久久久久久av下载红粉| 中文字幕日韩欧美| 欧美精品在线看| 国产成人一区二区三区电影| 欧美日韩国产va另类| 欧美午夜激情在线| 日韩在线观看网址| 88xx成人精品| 欧美日韩福利电影| 国产精品福利网| 97超级碰在线看视频免费在线看| 98午夜经典影视| 午夜精品久久久久久久99热浪潮| 国产精品吴梦梦| 中文字幕国产亚洲| 91最新在线免费观看| 国产99视频精品免视看7| 91在线精品视频| 色噜噜久久综合伊人一本| 45www国产精品网站| 国产精彩精品视频| 亚洲国产另类 国产精品国产免费| 日韩av片永久免费网站| 亚洲午夜未删减在线观看| 一区二区三区视频免费在线观看| 久久视频在线直播| 日韩欧美在线视频观看| 午夜免费在线观看精品视频| 国产精品女人网站| 国产综合在线看| 欧美日韩性视频| 国产日韩欧美中文在线播放| 国产欧美一区二区三区久久| 国产精品久久久久影院日本|