欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

C++中默認(rèn)成員函數(shù)與運(yùn)算符重載的示例分析-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)C++中默認(rèn)成員函數(shù)與運(yùn)算符重載的示例分析的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

成都創(chuàng)新互聯(lián)公司科技有限公司專業(yè)互聯(lián)網(wǎng)基礎(chǔ)服務(wù)商,為您提供四川電信機(jī)房托管高防服務(wù)器,成都IDC機(jī)房托管,成都主機(jī)托管等互聯(lián)網(wǎng)服務(wù)。

一:類和對象的基礎(chǔ)知識(shí):類的定義,訪問限定符,面向?qū)ο蠓庋b性,對象的大小計(jì)算等等。(編譯環(huán)境為VS2015)

面向?qū)ο蟪绦蛟O(shè)計(jì):

概念:(Object Oriented Programming,縮寫:OOP)是一種程序設(shè)計(jì)范型,同時(shí)也是一種程序開發(fā)的方法。對象指的是類的實(shí)例,將對象作為程序的基本單元,將程序和數(shù)據(jù)封裝其中,以提高軟件的重用性、靈活性和擴(kuò)展性。

類:類的基本思想是數(shù)據(jù)抽象和封裝。類的接口包括用戶所能執(zhí)行的操作;類的實(shí)現(xiàn)則包括類的數(shù)據(jù)成員、負(fù)責(zé)接口實(shí)現(xiàn)的函數(shù)體以及定義類所需的各種私有函數(shù)。要想實(shí)現(xiàn)數(shù)據(jù)抽線和封裝,就得先定義一個(gè)抽象數(shù)據(jù)類型。

訪問限定符:1.public(公有屬性);2.private(私有屬性,默認(rèn)情況下就為此屬性);3.protect(保護(hù))

注:

     1. public成員可從類外部直接訪問,private/protected成員不能從類外部直接訪問;

     2. 每個(gè)限定符在類體中可使用多次,它的作用域是從該限定符出現(xiàn)開始到下一個(gè)限定符之前或類體結(jié)束前。

     3. 類體中如果沒有定義限定符,則默認(rèn)為私有的。

     4. 類的訪問限定符體現(xiàn)了面向?qū)ο蟮姆庋b性。

例:定義一個(gè)日期類

C++中默認(rèn)成員函數(shù)與運(yùn)算符重載的示例分析

公有的成員函數(shù)可以在類內(nèi)聲明類外定義,也可以在類內(nèi)直接定義:

class Date
{
public:
 void Display(); //類內(nèi)聲明
private:
 int _year;
 int _month;
 int _day;
};

void Date::Display() //類外定義
{
 cout << _year << "-" << _month << "-" << _day << endl;
}

如何實(shí)例化一個(gè)對象?

class Date
{
public:
 void Display();

public:
 int _year;
 int _month;
 int _day;
};

int main()
{
 Date d1;
 d1._year = 2017;
 d1._month = 7;
 d1._day = 4;
 //Date d1;
 //Date *date = &d1;
 //date->_year = 2017;
 //date->_month = 7;
 //date->_day = 4;
 system("pause");
 return 0;
}

1.類只是一個(gè)模型一樣的東西,限定了類有哪些成員,定義出一個(gè)類并沒有分配實(shí)際的內(nèi)存空間來存儲(chǔ)它。

2.一個(gè)類可以實(shí)例化出多個(gè)對象,實(shí)例化出的對象占用實(shí)際的物理空間存儲(chǔ)類成員變量。

一個(gè)空類的大小是幾?

如果我們sizeof(Date),出來的結(jié)果是12;但是如果這個(gè)類是空類呢?結(jié)果是多少?

class AA {};

int main()
{
 int sz = sizeof(AA);
 cout << sz << endl;
 system("pause");
 return 0;
}

輸出結(jié)果是1!

原因是編譯器給空類分配了一個(gè)字節(jié)的大小用來占位。

注:結(jié)構(gòu)體內(nèi)存對其規(guī)則:

     1.第一個(gè)成員在與結(jié)構(gòu)體變量偏移量為0的地址處。

     2.其他成員變量要對齊到某個(gè)數(shù)字(對齊數(shù))的整數(shù)倍的地址處。

     //對齊數(shù) = 編譯器默認(rèn)的一個(gè)對齊數(shù) 與 該成員大小的較小值。

     VS中默認(rèn)的值為8

     gcc中的默認(rèn)值為4

     3.結(jié)構(gòu)體總大小為大對齊數(shù)(每個(gè)成員變量除了第一個(gè)成員都有一個(gè)對齊數(shù))的整數(shù)倍。

     4.如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對齊到自己的大對齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整體大小就是所有大對齊數(shù)(含嵌套結(jié)構(gòu)體的對齊數(shù))的整數(shù)倍。

2:類的四個(gè)默認(rèn)成員函數(shù)及運(yùn)算符重載相關(guān)知識(shí)

構(gòu)造函數(shù):

成員變量為私有的,要對它們進(jìn)行初始化,必須用一個(gè)公有成員函數(shù)來進(jìn)行。同時(shí)這個(gè)函數(shù)應(yīng)該有且僅在定義對象時(shí)自動(dòng)執(zhí)行一次,這時(shí)調(diào)用的函數(shù)稱為構(gòu)造函數(shù)(constructor) 。

構(gòu)造函數(shù)是特殊的成員函數(shù),其特征如下:

     1. 函數(shù)名與類名相同。

     2. 無返回值。

     3. 對象構(gòu)造(對象實(shí)例化)時(shí)系統(tǒng)自動(dòng)調(diào)用對應(yīng)的構(gòu)造函數(shù)。

     4. 構(gòu)造函數(shù)可以重載。

     5. 構(gòu)造函數(shù)可以在類中定義,也可以在類外定義。

     6. 如果類定義中沒有給出構(gòu)造函數(shù),則C++編譯器自動(dòng)產(chǎn)生一個(gè)缺省的構(gòu)造函數(shù),但只要我們定義了一個(gè)構(gòu)造函數(shù),系統(tǒng)就不會(huì)自動(dòng)生成缺省的構(gòu)造函數(shù)。

     7. 無參的構(gòu)造函數(shù)和全缺省值的構(gòu)造函數(shù)都認(rèn)為是缺省構(gòu)造函數(shù),并且缺省的構(gòu)造函數(shù)只能有一個(gè)。

例:我們平時(shí)最常用的就是全缺省值的構(gòu)造函數(shù),定義方式如下:

 Date(int year = 1900, int month = 1, int day = 1)
 {
  _year = year;
  _month = month;
  _day = day;
 }
 //在main函數(shù)中按照下面方式進(jìn)行初始化
 //若不進(jìn)行賦值,則采用缺省值為1900-1-1
 Date d1(2017, 7, 6)

析構(gòu)函數(shù):

當(dāng)一個(gè)對象的生命周期結(jié)束時(shí),C++編譯系統(tǒng)會(huì)自動(dòng)調(diào)用一個(gè)成員函數(shù),這個(gè)特殊的成員函數(shù)即析構(gòu)函數(shù)(destructor)

其特征如下:

1. 析構(gòu)函數(shù)在類名加上字符~。

2. 析構(gòu)函數(shù)無參數(shù)無返回值。

3. 一個(gè)類有且只有一個(gè)析構(gòu)函數(shù)。若未顯示定義,系統(tǒng)會(huì)自動(dòng)生成缺省的析構(gòu)函數(shù)。

4. 對象生命周期結(jié)束時(shí),C++編譯系統(tǒng)系統(tǒng)自動(dòng)調(diào)用析構(gòu)函數(shù)。

5. 注意析構(gòu)函數(shù)體內(nèi)并不是刪除對象,而是做一些清理工作。

就好比下面這個(gè)例子,構(gòu)造函數(shù)開辟了size個(gè)int類型大小的空間,在程序結(jié)束時(shí)我們就應(yīng)該釋放掉該內(nèi)存空間,避免發(fā)生內(nèi)存泄漏:

class Array
{
public:
 Array(int size)
 {
  _ptr = new int[size];
 }

 ~Array()
 {
  if (_ptr)
  {
   delete[] _ptr;
  }
 }
private:
 int* _ptr;
};

拷貝構(gòu)造

創(chuàng)建對象時(shí)使用同類對象來進(jìn)行初始化,這時(shí)所用的構(gòu)造函數(shù)稱為拷貝構(gòu)造函數(shù)(Copy Constructor),拷貝構(gòu)造函數(shù)是特殊的構(gòu)造函數(shù)。

例:

 Date(const Date& d)
 {
  _year = d._year;
  _month = d._month;
  _day = d._day;
 }

 //Date d1(2017, 7, 4);
 // 下面兩種用法都是調(diào)用拷貝構(gòu)造函數(shù),是等價(jià)的。
 //Date d2(d1); 
 //Date d2 = d1;

特征

     1. 拷貝構(gòu)造函數(shù)其實(shí)是一個(gè)構(gòu)造函數(shù)的重載。

     2. 拷貝構(gòu)造函數(shù)的參數(shù)必須使用引用傳參,使用傳值方式會(huì)引發(fā)無窮遞歸調(diào)用。

     3. 若未顯示定義,系統(tǒng)會(huì)默認(rèn)缺省的拷貝構(gòu)造函數(shù)。缺省的拷貝構(gòu)造函數(shù)會(huì),依次拷貝類成員進(jìn)行初始化。

賦值運(yùn)算符重載

拷貝構(gòu)造函數(shù)是創(chuàng)建的對象,使用一個(gè)已有對象來初始化這個(gè)準(zhǔn)備創(chuàng)建的對象。賦值運(yùn)算符的重載是對一個(gè)已存在的對象進(jìn)行拷貝賦值。

5個(gè)C++不能重載的運(yùn)算符:.*/::/sizeof/?:/.

 Date& operator = (const Date& d)
 {
  if (this != &d)//防止重復(fù)賦值
  {
   this->_year = d._year;
   this->_month = d._month;
   this->_day = d._day;
  }
  return *this;
 }

 void Test()
 {
  Date d1(2017, 7, 4);
  //拷貝構(gòu)造
  Date d2(d1);
  //賦值運(yùn)算符重載
  Date d3;
  d3 = d1;
 }

3:關(guān)于隱含的this指針以及對運(yùn)算符重載背后做的事情。

隱含的this指針

     1. 每個(gè)成員函數(shù)都有一個(gè)指針形參,它的名字是固定的,稱為this指針,this指針是隱式的。(構(gòu)造函數(shù)比較特殊,沒有這個(gè)隱含this形參)

     2. 編譯器會(huì)對成員函數(shù)進(jìn)行處理,在對象調(diào)用成員函數(shù)時(shí),對象地址作實(shí)參傳遞給成員函數(shù)的第一個(gè)形參this指針。

     3. this指針是成員函數(shù)隱含指針形參,是編譯器自己處理的,我們不能在成員函數(shù)的形參中添加this指針的參數(shù)定義,也不能在調(diào)用時(shí)顯示傳遞對象的地址給this指針。

例一:在拷貝構(gòu)造函數(shù)中this所做的事情

C++中默認(rèn)成員函數(shù)與運(yùn)算符重載的示例分析

例二:在運(yùn)算符重載中this做的事情

C++中默認(rèn)成員函數(shù)與運(yùn)算符重載的示例分析

感謝各位的閱讀!關(guān)于“C++中默認(rèn)成員函數(shù)與運(yùn)算符重載的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站aaarwkj.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

本文名稱:C++中默認(rèn)成員函數(shù)與運(yùn)算符重載的示例分析-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://aaarwkj.com/article26/ggdcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、品牌網(wǎng)站建設(shè)用戶體驗(yàn)、軟件開發(fā)、面包屑導(dǎo)航、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
亚洲丰满毛茸茸毛茸茸| 亚洲av天堂免费在线观看| 日本特黄高清免费大片| 亚洲国产精品一区二区三| 精品久久久久久久久极品| 国产精品黄色片在线观看| 在线看日本一区二区| 国产精品青青在线观看爽香蕉| 欧美午夜精品一二三区| 国产91对白在线观看| 国产内射一级一片高清视频观看 | 精品亚洲天堂一区二区三区| 国产欧美日韩午夜激情| 日韩不卡免费在线视频| 俄罗斯少妇毛茸茸的高潮| 十八禁在线观看点击进入| 四虎精品永久在线视频| 国产91在线拍揄自揄| 亚洲欧美日韩一区二区视频| 久久午夜av一区二区| 亚洲欧美国产日韩另类| 东京热男人的av天堂| 久久精品亚洲欧美麻豆| 亚洲精品中文字幕日本乱码| 中文字幕日韩欧美一区二区| 免费在线免费观看av| 日本岛国大片一区二区在线观看| 亚洲av成人在线不卡| 久久国产精品午夜视频| 最新免费观看男女啪啪视频| 国产一区二区欧美精品| 中文字幕日韩人妻一二三区| 亚洲欧洲日产国码一区| 日韩国产一区二区在线观看| 欧美日韩国产精品一区二区在线观看| 欧美口爆吞精在线观看| 亚洲精品国产精品乱码不| 情侣自拍偷拍亚洲天堂区| 亚洲欧美日韩另类精品一区二区三区| 91好色视频在线观看| 亚洲另类综合日韩一区|