溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

this指針和構(gòu)造函數(shù)

發(fā)布時(shí)間:2020-06-12 03:04:08 來源:網(wǎng)絡(luò) 閱讀:950 作者:迎著風(fēng)奔跑 欄目:編程語言

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

 特性:

1.構(gòu)造函數(shù)的命名必須和類名完全相同;在java中普通函數(shù)可以和構(gòu)造函數(shù)同名,但是必須帶有返回值。

2.構(gòu)造函數(shù)的功能主要用于在類的對(duì)象創(chuàng)建時(shí)定義初始化的狀態(tài)。它沒有返回值,也不能用void來修飾。這就保證了它不僅什么也不用自動(dòng)返回,而且根本不能有任何選擇。而其他方法都有返回值,即使是void返回值。盡管方法體本身不會(huì)自動(dòng)返回什么,但仍然可以讓它返回一些東西,而這些東西可能是不安全的。

3.構(gòu)造函數(shù)不能被直接調(diào)用,必須通過new運(yùn)算符在創(chuàng)建對(duì)象時(shí)才會(huì)自動(dòng)調(diào)用;而一般的方法是在程序執(zhí)行到它的時(shí)候被調(diào)用的。

4.當(dāng)定義一個(gè)類的時(shí)候,通常情況下都會(huì)顯示該類的構(gòu)造函數(shù),并在函數(shù)中指定初始化的工作也可省略。

5.當(dāng)一個(gè)類只定義了私有的構(gòu)造函數(shù),將無法通過new關(guān)鍵字來創(chuàng)建其對(duì)象,當(dāng)一個(gè)類沒有定義任何構(gòu)造函數(shù),編譯器會(huì)為其自動(dòng)生成一個(gè)默認(rèn)的無參的構(gòu)造函數(shù)。

作用:

  1. 構(gòu)建對(duì)象

  2. 初始化對(duì)象

  3. 類型轉(zhuǎn)換


    構(gòu)造函數(shù)定義格式為:

    class <類名>

    {

    public:

    <類名>(參數(shù)表)


    };

    <類名>::<函數(shù)名>(參數(shù)表)

    {

    //函數(shù)體

    }

    如以下定義是合法的:

    class T

    {

    public:

    T(int a=0){i=a;}//構(gòu)造函數(shù)允許直接寫在類定義內(nèi),也允許有參數(shù)表。

    private:int i;

    };


指針:

  1. 用處:一個(gè)對(duì)象的this指針并不是對(duì)象本身的一部分,不會(huì)影響sizeof(對(duì)象)的結(jié)果。this作用域是在類內(nèi)部,當(dāng)在類的非靜態(tài)成員函數(shù)中訪問類的非靜態(tài)成員的時(shí)候,編譯器會(huì)自動(dòng)將對(duì)象本身的地址作為一個(gè)隱含參數(shù)傳遞給函數(shù)。也就是說,即使你沒有寫上this指針,編譯器在編譯的時(shí)候也是加上this的,它作為非靜態(tài)成員函數(shù)的隱含形參,對(duì)各成員的訪問均通過this進(jìn)行。

    2. this只能在成員函數(shù)中使用。
    全局函數(shù),靜態(tài)函數(shù)都不能使用this。
    實(shí)際上,成員函數(shù)默認(rèn)第一個(gè)參數(shù)為T* const register this。
    如:
    class A{public: int func(int p){}};
    其中,func的原型在編譯器看來應(yīng)該是: int func(A* const register this, int p);
    由此可見,this在成員函數(shù)的開始前構(gòu)造的,在成員的結(jié)束后清除。
    這個(gè)生命周期同任一個(gè)函數(shù)的參數(shù)是一樣的,沒有任何區(qū)別。
    當(dāng)調(diào)用一個(gè)類的成員函數(shù)時(shí),編譯器將類的指針作為函數(shù)的this參數(shù)傳遞進(jìn)去。如:
    A a;
    a.func(10);
    此處,編譯器將會(huì)編譯成: A::func(&a, 10);

關(guān)于this 指針這里有一個(gè)問題,this指針如何傳遞給類中函數(shù)的?

this是通過函數(shù)參數(shù)的首參數(shù)來傳遞的。this指針是在調(diào)用之前生成的。類實(shí)例后的函數(shù),沒有這個(gè)說法。類在實(shí)例化時(shí),只分配類中的變量空間,并沒有為函數(shù)分配空間。自從類的函數(shù)定義完成后,它就在那兒,不會(huì)跑的。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI