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

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

C++中的四個默認成員函數與運算符重載詳解

2020-01-26 13:58:54
字體:
來源:轉載
供稿:網友

本文主要給大家介紹了關于C++默認成員函數與運算符重載的相關內容,分享出來公的敬愛啊參考學習,話不多說,來一起看看詳細的介紹:

一:類和對象的基礎知識:類的定義,訪問限定符,面向對象封裝性,對象的大小計算等等。(編譯環境為VS2015)

面向對象程序設計:

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

類:類的基本思想是數據抽象和封裝。類的接口包括用戶所能執行的操作;類的實現則包括類的數據成員、負責接口實現的函數體以及定義類所需的各種私有函數。要想實現數據抽線和封裝,就得先定義一個抽象數據類型。

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

注:

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

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

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

      4. 類的訪問限定符體現了面向對象的封裝性。

例:定義一個日期類

公有的成員函數可以在類內聲明類外定義,也可以在類內直接定義:

class Date{public: void Display(); //類內聲明private: int _year; int _month; int _day;};void Date::Display() //類外定義{ cout << _year << "-" << _month << "-" << _day << endl;}

如何實例化一個對象?

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.類只是一個模型一樣的東西,限定了類有哪些成員,定義出一個類并沒有分配實際的內存空間來存儲它。

2.一個類可以實例化出多個對象,實例化出的對象占用實際的物理空間存儲類成員變量。

一個空類的大小是幾?

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

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

輸出結果是1!

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

注:結構體內存對其規則:

      1.第一個成員在與結構體變量偏移量為0的地址處。

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

      //對齊數 = 編譯器默認的一個對齊數 與 該成員大小的較小值。

      VS中默認的值為8

      gcc中的默認值為4

      3.結構體總大小為最大對齊數(每個成員變量除了第一個成員都有一個對齊數)的整數倍。

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

2:類的四個默認成員函數及運算符重載相關知識

構造函數:

成員變量為私有的,要對它們進行初始化,必須用一個公有成員函數來進行。同時這個函數應該有且僅在定義對象時自動執行一次,這時調用的函數稱為構造函數(constructor) 。

構造函數是特殊的成員函數,其特征如下:

      1. 函數名與類名相同。

      2. 無返回值。

      3. 對象構造(對象實例化)時系統自動調用對應的構造函數。

      4. 構造函數可以重載。

      5. 構造函數可以在類中定義,也可以在類外定義。

      6. 如果類定義中沒有給出構造函數,則C++編譯器自動產生一個缺省的構造函數,但只要我們定義了一個構造函數,系統就不會自動生成缺省的構造函數。

      7. 無參的構造函數和全缺省值的構造函數都認為是缺省構造函數,并且缺省的構造函數只能有一個。

例:我們平時最常用的就是全缺省值的構造函數,定義方式如下:

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

析構函數:

當一個對象的生命周期結束時,C++編譯系統會自動調用一個成員函數,這個特殊的成員函數即析構函數(destructor)

其特征如下:

1. 析構函數在類名加上字符~。

2. 析構函數無參數無返回值。

3. 一個類有且只有一個析構函數。若未顯示定義,系統會自動生成缺省的析構函數。

4. 對象生命周期結束時,C++編譯系統系統自動調用析構函數。

5. 注意析構函數體內并不是刪除對象,而是做一些清理工作。

就好比下面這個例子,構造函數開辟了size個int類型大小的空間,在程序結束時我們就應該釋放掉該內存空間,避免發生內存泄漏:

class Array{public: Array(int size) {  _ptr = new int[size]; } ~Array() {  if (_ptr)  {   delete[] _ptr;  } }private: int* _ptr;};

拷貝構造

創建對象時使用同類對象來進行初始化,這時所用的構造函數稱為拷貝構造函數(Copy Constructor),拷貝構造函數是特殊的構造函數。

例:

 Date(const Date& d) {  _year = d._year;  _month = d._month;  _day = d._day; } //Date d1(2017, 7, 4); // 下面兩種用法都是調用拷貝構造函數,是等價的。 //Date d2(d1);  //Date d2 = d1;

特征

      1. 拷貝構造函數其實是一個構造函數的重載。

      2. 拷貝構造函數的參數必須使用引用傳參,使用傳值方式會引發無窮遞歸調用。

      3. 若未顯示定義,系統會默認缺省的拷貝構造函數。缺省的拷貝構造函數會,依次拷貝類成員進行初始化。

賦值運算符重載

拷貝構造函數是創建的對象,使用一個已有對象來初始化這個準備創建的對象。賦值運算符的重載是對一個已存在的對象進行拷貝賦值。

5個C++不能重載的運算符: .*/::/sizeof/?:/.

 Date& operator = (const Date& d) {  if (this != &d)//防止重復賦值  {   this->_year = d._year;   this->_month = d._month;   this->_day = d._day;  }  return *this; } void Test() {  Date d1(2017, 7, 4);  //拷貝構造  Date d2(d1);  //賦值運算符重載  Date d3;  d3 = d1; }

3:關于隱含的this指針以及對運算符重載背后做的事情。

隱含的this指針

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

      2. 編譯器會對成員函數進行處理,在對象調用成員函數時,對象地址作實參傳遞給成員函數的第一個形參this指針。

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

例一:在拷貝構造函數中this所做的事情

例二:在運算符重載中this做的事情

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久久久国产| 国产有码一区二区| 国内精品久久久久久久久| 欧美亚洲成人免费| 国产欧美精品在线播放| 国产一区私人高清影院| 国产精品偷伦视频免费观看国产| 日韩福利伦理影院免费| 亚洲精品欧美日韩| 久久视频免费观看| 久久久亚洲天堂| 亚洲欧美日韩国产成人| 97视频在线免费观看| 日韩中文字幕免费看| 国产亚洲xxx| 国产亚洲人成网站在线观看| 亚洲精品ady| 亚洲欧美国内爽妇网| 日韩在线视频免费观看高清中文| 午夜精品美女自拍福到在线| 欧美限制级电影在线观看| 亚洲欧美日韩中文在线制服| 欧美重口另类videos人妖| 亚洲精品大尺度| 国产日韩欧美在线播放| 92国产精品视频| 欧美激情一区二区三区久久久| 精品中文字幕在线2019| 欧美片一区二区三区| 国产成人在线精品| 一区二区三区美女xx视频| 亚洲自拍小视频| 亚洲欧美制服综合另类| 狠狠躁夜夜躁久久躁别揉| 亚洲欧美日本伦理| 欧美福利视频在线观看| 91网站免费观看| 91免费电影网站| 国产欧美一区二区三区久久| 国产日韩欧美中文| 日韩免费中文字幕| 91社影院在线观看| 欧美高清激情视频| 久久久久久成人精品| 91高潮在线观看| 国产视频久久久久久久| 国产亚洲精品va在线观看| 91精品国产综合久久香蕉| 久久精品美女视频网站| 97超级碰碰人国产在线观看| 国产精品日韩精品| 欧美精品videosex性欧美| 欧美黑人一级爽快片淫片高清| 国产日韩欧美电影在线观看| 亚洲色图13p| 精品国产精品自拍| 欧美高清第一页| 国产欧美日韩亚洲精品| 亚洲免费成人av电影| 精品久久久视频| 国产在线精品一区免费香蕉| 中文字幕无线精品亚洲乱码一区| 成人有码在线视频| 成人网在线视频| 欧美激情在线一区| 欧美一区第一页| 亚洲午夜av电影| 欧美激情视频在线免费观看 欧美视频免费一| 国产玖玖精品视频| 久久精品91久久香蕉加勒比| 亚洲精品99999| 少妇久久久久久| 久久久之久亚州精品露出| 一区二区三区视频免费| 亚洲综合社区网| 2020久久国产精品| 国产亚洲精品久久久优势| 91欧美激情另类亚洲| 亚洲精品日韩在线| 日韩av有码在线| 日韩精品免费看| 正在播放亚洲1区| 久久久久www| 欧美在线观看一区二区三区| 欧美精品性视频| 国产区精品在线观看| 中文字幕日韩在线观看| 欧美成人sm免费视频| 欧美在线精品免播放器视频| 这里只有精品视频在线| 成人激情春色网| 中文字幕一区日韩电影| 中文字幕日韩综合av| 中文字幕欧美精品在线| 精品久久久久久中文字幕大豆网| 黄色一区二区在线观看| 亚洲视频精品在线| 97国产精品久久| 性色av一区二区三区红粉影视| 日韩在线视频网站| 亚洲国产一区二区三区四区| 97人人模人人爽人人喊中文字| 国内精品小视频在线观看| 国产aⅴ夜夜欢一区二区三区| 久国内精品在线| 亚洲精品国产综合区久久久久久久| 日韩av影片在线观看| 久久久久久69| 5566日本婷婷色中文字幕97| 久久久久久国产免费| 国产精品69精品一区二区三区| 午夜精品久久久久久久99热浪潮| 久久免费视频这里只有精品| 91欧美视频网站| 亚洲第一区第一页| 国产精品1区2区在线观看| 亚洲色图第一页| 国内精品免费午夜毛片| 亚洲一区二区三区毛片| 国产成人精品国内自产拍免费看| 91在线精品视频| 日韩中文娱乐网| 精品久久久久久久久久久久久久| 久久天堂av综合合色| 日韩经典中文字幕在线观看| 国产一区二区丝袜高跟鞋图片| 国产日韩欧美综合| 91天堂在线视频| 国产成人精品一区二区三区| 久久久国产影院| 精品调教chinesegay| 日韩在线观看免费高清完整版| 国产精品视频男人的天堂| 91美女高潮出水| 国产精品69精品一区二区三区| 欧美高清第一页| 97精品在线视频| 一区二区三区美女xx视频| 亚洲国产第一页| 亚洲免费一在线| 国内自拍欧美激情| 亚洲欧洲国产一区| 久久五月情影视| 亚洲国产精彩中文乱码av在线播放| 日韩欧美在线一区| 91在线视频导航| 日韩久久免费电影| 91在线无精精品一区二区| 中文字幕久久久av一区| 欧美日本黄视频| 亚洲精品久久久久国产| 欧美最猛性xxxxx亚洲精品| 精品久久久久久久久国产字幕| 欧美有码在线观看| 久久亚洲成人精品| 国产精品欧美日韩一区二区| 浅井舞香一区二区| 欧美第一黄网免费网站| 国产主播精品在线| 国产精品99久久久久久www| 国语自产精品视频在线看一大j8| 欧美片一区二区三区| 91伊人影院在线播放| 欧美激情第6页|