本篇文章給大家分享的是有關(guān)C++類中的特殊成員函數(shù),小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
1、默認(rèn)構(gòu)造函數(shù)
默認(rèn)構(gòu)造函數(shù)指不需要參數(shù)就能初始化的構(gòu)造函數(shù)。包含無參和所有參數(shù)有默認(rèn)值兩種類型的構(gòu)造函數(shù)。
2、復(fù)制構(gòu)造函數(shù)
復(fù)制構(gòu)造函數(shù)指使用該類的對象作為參數(shù)的構(gòu)造函數(shù)??梢杂衅渌麉?shù),但必須提供默認(rèn)值。
3、復(fù)制賦值運(yùn)算符
重載等號=,將該類的對象賦值給已定義對象。
4、析構(gòu)函數(shù)
沒啥可說的。
5、移動構(gòu)造函數(shù)
C++11新增,該類的右值對象為參數(shù)的構(gòu)造函數(shù),其余同復(fù)制構(gòu)造函數(shù)。
6、移動復(fù)制運(yùn)算符
同復(fù)制賦值運(yùn)算符,唯一不同是參數(shù)為右值。
看定義容易迷糊,上代碼就會很清晰:
#include <iostream> #include <string> class Foo { public: std::string s; // 默認(rèn)構(gòu)造函數(shù) Foo() { std::cout << "default constructor" << std::endl; } // 復(fù)制構(gòu)造函數(shù) Foo(const Foo& foo) { std::cout << "copy constructor" << std::endl; s = foo.s; } // 復(fù)制賦值運(yùn)算符 Foo& operator=(const Foo& foo) { std::cout << "copy assignment operator" << std::endl; s = foo.s; return * this;} // 移動構(gòu)造函數(shù) Foo(Foo&& foo) { std::cout << "move constructor" << std::endl; s = std::move(foo.s); } // 移動賦值運(yùn)算符 Foo& operator=(Foo&& foo) { std::cout << "move assignment operator" << std::endl; s = std::move(foo.s); return *this;} }; int main() { Foo foo1; Foo foo2(foo1); foo1 = foo2; Foo foo3(std::move(foo1)); foo2 = std::move(foo3); }
用g++或者clang編譯,加上-fno-elide-constructors -std=c++0x選項。執(zhí)行程序輸出如下:
default constructor
copy constructor
copy assignment operator
move constructor
move assignment operator
結(jié)果是我們預(yù)期的。需要注意的是Foo foo3 = foo1的形式會調(diào)用復(fù)制構(gòu)造函數(shù),不會調(diào)用復(fù)制賦值運(yùn)算符。原因是Foo foo3 = xxx聲明和定義一個新對象,而賦值是作用在已定義對象。移動賦值運(yùn)算符同理。
C++11新增了=default和=delete函數(shù)修飾符,提示編譯器使用默認(rèn)或者刪除默認(rèn)的特殊函數(shù)。需要注意的是這兩個修飾符只能修飾上述特殊函數(shù),用戶可以用其對特殊函數(shù)進(jìn)行裁剪。一個例子:
struct Test { // 使用默認(rèn)構(gòu)造函數(shù) Test() = default; // 刪除復(fù)制賦值運(yùn)算符 Test& operator=(const Test& test) = delete; // 使用默認(rèn)析構(gòu)函數(shù) ~Test() = default; };
以上就是C++類中的特殊成員函數(shù),小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站aaarwkj.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
新聞標(biāo)題:C++類中的特殊成員函數(shù)-創(chuàng)新互聯(lián)
鏈接URL:http://aaarwkj.com/article36/gicsg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、網(wǎng)站排名、企業(yè)建站、用戶體驗、動態(tài)網(wǎng)站、移動網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)