91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

構造函數與析構函數

發布時間:2020-07-01 04:16:09 來源:網絡 閱讀:486 作者:匯天下豪杰 欄目:編程語言

1、構造函數

  在我們定義一個類后,對其實例化,值都是隨機的,然后我們自己在寫函數對其賦值,感覺是多余的,

C++就提供了在實例化時就初始化的過程,就叫做構造函數;

  構造函數是特殊的公有成員函數,有一下特點:

  (1)、構造函數與類名相同;

  (2)、構造函數不寫返回值;

  (3)、在實例化對象時,自動 必須 一次調用;

  (4)、可以重載(人生而不平等,這樣理解);

  (5)、構造函數可以在類內定義,也可以在類外定義(通過作用域限定符::)

  (6)、C++會自動的給出默認的構造函數,要是自己寫了,就不會再提供默認的構造函數了;

class Test{
public:
  Test(int d = 0) : data(d){}

這就是一個缺省的構造函數,存在時,不能再有無參的構造函數(不然是初始化為隨機值還是默認值0);


2、構造函數的3個作用:

  (1)、構造對象,自動調用構造函數;

  (2)、初始化對象;

  (3)、類型轉換

構造函數與析構函數


分析:t1是Test類型的,100是×××的;不同類型怎么能賦值呢?

  :C C++都是強類型語言,如果類型不一樣,從某種角度上說不許賦值

int a;
double d = 12.34;

a = d;

類型不一樣,不可能直接賦值,的借助中間臨時變量來賦值;


現在來看t = 100;

100 必須的找到中間橋梁Test類型的,才能給Test類型的t賦值,里面是對應成員一一賦值;

剛好有個構造函數,并且有一個參數,通過構造函數,把×××100轉化為Test類型,此時實例化了一個對象,剛好轉換為類型一致,可以賦值。


此時還存在一個這樣的問題:關鍵字explicit  顯示的,作用:

  a、預防構造函數被隱式調用

  b、只能在構造函數前使用此關鍵字;

構造函數與析構函數

此時隱式賦值,不能調用顯示構造函數,所以出錯;


構造函數與析構函數

Test t = (Test)100;強制類型轉換就是顯示調用,explicit修飾的構造函數方可被調用!


現在看下面的問題:Test類型能否給int類型賦值?

構造函數與析構函數

兩邊類型不一致,并且在類的內部沒有找到轉換相同類型Test->int類型的函數(也就是說沒有找到中間橋梁);所以出錯!

必須的用到運算符重載(添加方法),下面這個叫做類型轉換,————>不能有返回值;

添加在類內一個方法:

public:
    operator int(){
        return data;
    }

將Test類型轉換為int,(有了這個方法就可以實現),從而找到橋梁,類型一致便可賦值;

原理: 借助了中間的無名變量空間(充當橋梁);

結果如下:

構造函數與析構函數


3、析構函數

~Test(){}

析構函數就是釋放對象占用的空間,對任何函數死亡都是一樣的,所以任何對象的析構只能用相同的方式進行,

析構函數無重載,無參,無返回,只有一個(死是平等的)。

特點:

        (1)、析構函數與類名相同,但在前面加上'~',如:~Test(){}

        (2)、對象釋放時,系統自動調用析構函數(可以是默認的)


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

霞浦县| 博爱县| 美姑县| 绥化市| 青浦区| 大同县| 甘孜| 华宁县| 内江市| 吉安县| 通化市| 德钦县| 蕉岭县| 华安县| 翁牛特旗| 龙里县| 连云港市| 麻栗坡县| 土默特右旗| 上饶市| 墨竹工卡县| 洪洞县| 济宁市| 洛宁县| 镇巴县| 平山县| 乌拉特后旗| 双牌县| 长沙县| 湖南省| 逊克县| 新绛县| 新竹市| 高台县| 什邡市| 池州市| 精河县| 余庆县| 大安市| 壶关县| 莱阳市|