国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++面試八股文:什么是構(gòu)造函數(shù)?

這篇具有很好參考價(jià)值的文章主要介紹了C++面試八股文:什么是構(gòu)造函數(shù)?。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

某日二師兄參加X(jué)XX科技公司的C++工程師開(kāi)發(fā)崗位第29面:

面試官:什么是構(gòu)造函數(shù)?

二師兄:構(gòu)造函數(shù)是一種特殊的成員函數(shù),用于創(chuàng)建和初始化類(lèi)的對(duì)象。構(gòu)造函數(shù)的名稱(chēng)與類(lèi)的名稱(chēng)相同,并且沒(méi)有返回類(lèi)型。構(gòu)造函數(shù)在對(duì)象被創(chuàng)建時(shí)自動(dòng)調(diào)用。

struct Foo
{
  Foo(int v):val(i){}	//構(gòu)造函數(shù)
private:
  int val;
};

面試官:什么是默認(rèn)構(gòu)造函數(shù)?什么情況下默認(rèn)構(gòu)造函數(shù)會(huì)被創(chuàng)建?

二師兄:沒(méi)有任何參數(shù)的構(gòu)造函數(shù)(所有參數(shù)都要默認(rèn)參數(shù)的構(gòu)造函數(shù)也是)。一般定義類(lèi)時(shí)沒(méi)有顯式的聲明任何構(gòu)造函數(shù),默認(rèn)構(gòu)造函數(shù)會(huì)被編譯器自動(dòng)創(chuàng)建。

struct Foo
{
private:
  int val;
};	//此時(shí)默認(rèn)構(gòu)造函數(shù)會(huì)被創(chuàng)建

二師兄:當(dāng)然就算為類(lèi)自定義了構(gòu)造函數(shù),我們也可以通過(guò)Foo()=default為類(lèi)顯式定義一個(gè)默認(rèn)構(gòu)造函數(shù)。

面試官:什么是構(gòu)造函數(shù)初始值列表?

二師兄:是為了初始化成員變量所傳入的參數(shù)列表:

class Foo
{
public:
    Foo(int i, long l):ival_(i),lval_(l){}	//初始值列表
private:
    int ival_;
    long lval_;
};

面試官:上面的構(gòu)造函數(shù)和以下的構(gòu)造函數(shù)有什么區(qū)別?

Foo(int i, long l)
{
    ival_ = i;
    lval_ = l;
}

二師兄:這是初始化與賦值的區(qū)別。這段代碼中的ival_和lval_先被默認(rèn)初始化,然后被賦值。而初始化列表是直接初始化,少了一步賦值。

面試官:如果把構(gòu)造函數(shù)寫(xiě)成Foo(int i, long l):lval(l),ival_(i){}會(huì)有什么問(wèn)題嗎?

二師兄:成員初始化的順序盡量要和定義的順序保持一致。如下面的代碼,就是未定義的:

class Foo
{
public:
    Foo(int i):jval_(i),ival_(jval_){}	//未定義的行為,因?yàn)閕val先被初始化,這時(shí)候jval是未定義的
private:
    int ival_;
    int jval_;
};

面試官:什么是委托構(gòu)造函數(shù)?

二師兄:構(gòu)造函數(shù)在構(gòu)造對(duì)象的時(shí)候把一部分任務(wù)委托給其他構(gòu)造函數(shù)進(jìn)行構(gòu)造,這是C++11引入的新特性:

class Foo
{
public:
    Foo(int i, long l):ival_(i),lval_(l){}
    Foo(int i):Foo(i,0){}   //委托給Foo(int i, long l)
private:
    int ival_;
    long lval_;
};

面試官:如果構(gòu)造函數(shù)沒(méi)有初始化任何成員變量,使用這個(gè)構(gòu)造函數(shù)會(huì)發(fā)生什么?

二師兄:成員變量將會(huì)被默認(rèn)初始化。

面試官:什么是默認(rèn)初始化?

二師兄:如果是內(nèi)置類(lèi)型(如bool、intdouble),將不被初始化,如果是類(lèi)類(lèi)型,將執(zhí)行類(lèi)類(lèi)型的的默認(rèn)構(gòu)造函數(shù)初始化變量。如果類(lèi)類(lèi)型的默認(rèn)構(gòu)造函數(shù)是刪除的(=delete)或定義了其他構(gòu)造函數(shù)但是沒(méi)有定義默認(rèn)構(gòu)造函數(shù)的,將不能通過(guò)編譯。

二師兄:類(lèi)類(lèi)型的初始化時(shí)一個(gè)循環(huán)的過(guò)程,如果類(lèi)類(lèi)型中有類(lèi)類(lèi)型成員,初始化方式和以上描述的一致。

struct Foo{ int a;}
struct Goo
{
    int b;
    Foo f;
};	
Goo g;	//此g.b是默認(rèn)初始化,值不確定。Foo中的a也是默認(rèn)初始化,所以g.f.a的值也是不確定的。

面試官:可以使用virtual修飾構(gòu)造函數(shù)嗎?

二師兄:不可以,因?yàn)闃?gòu)造函數(shù)在對(duì)象構(gòu)造階段調(diào)用,虛表尚未建立,所以無(wú)法調(diào)用虛函數(shù)實(shí)現(xiàn)多態(tài)。

面試官:可以使用const修飾構(gòu)造函數(shù)嗎?

二師兄:不可以,因?yàn)闃?gòu)造函數(shù)需要初始化成員變量,這與const修飾成員函數(shù)的意義相悖。

面試官:可以使用constexpr修飾構(gòu)造函數(shù)嗎?

二師兄:可以。這表明類(lèi)的對(duì)象可以在編譯器構(gòu)造。我們所熟悉的std::array的構(gòu)造函數(shù)在C++20下就是constexpr的。

面試官:什么情況下會(huì)將一個(gè)類(lèi)的構(gòu)造函數(shù)定義為私有的?

二師兄:一般不希望直接通過(guò)類(lèi)型定義對(duì)象,如C++的單例模式:

class Singleton
{
public:
    static Singleton& Instance()
    {
        static Singleton instance;
        return instance;
    }
    Singleton(const Singleton&) = delete;
    Singleton(Singleton&&) = delete;
    Singleton& operator=(const Singleton&) = delete;
    Singleton& operator=(Singleton&&) = delete;
private:
    Singleton() = default;
    ~Singleton() = default;
};

Singleton s; //編譯失敗
Singleton& s = Singleton::Instance();	//編譯成功

面試官:最后一個(gè)問(wèn)題,你知聲明、定義、初始化、賦值的區(qū)別嗎?

二師兄:聲明是告訴編譯器這里有個(gè)符號(hào),但不分配內(nèi)存。定義告訴編譯器,這里有個(gè)符號(hào),要分配一塊內(nèi)存給它。初始化時(shí)在分配內(nèi)存的時(shí)候給它一個(gè)初始值。賦值是將這塊內(nèi)存原來(lái)的值擦除,給它填入一個(gè)新值。

面試官:好的,今天的面試結(jié)束了,請(qǐng)回去等通知吧。

C++類(lèi)的構(gòu)造函數(shù)的基本考點(diǎn)都在這里了,小伙伴本要理解這些設(shè)計(jì)及設(shè)計(jì)背后的取舍,面對(duì)面試官的拷問(wèn)才能對(duì)答如流哦。

好了,今天的面試到這里就結(jié)束了,讓我們期待明天面試官和二師兄的表現(xiàn)吧~

關(guān)注我,帶你21天“精通”C++?。ü奉^)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-509181.html

到了這里,關(guān)于C++面試八股文:什么是構(gòu)造函數(shù)?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++面試八股文:什么是空指針/野指針/懸垂指針?

    某日二師兄參加X(jué)XX科技公司的C++工程師開(kāi)發(fā)崗位第30面: 面試官:什么是空指針? 二師兄:一般我們將等于 0 / NULL / nullptr 的指針?lè)Q為空指針??罩羔槻荒鼙唤庖茫强梢詫?duì)空指針取地址。 面試官:你知道 0/NULL/nullptr 三者之間的區(qū)別嗎? 二師兄:雖然三者都能定義空指

    2024年02月11日
    瀏覽(25)
  • C++面試八股文:C++中,函數(shù)的參數(shù)應(yīng)該傳值還是傳引用?

    某日二師兄參加X(jué)XX科技公司的C++工程師開(kāi)發(fā)崗位第8面: 面試官:C++中,函數(shù)的參數(shù)應(yīng)該傳值還是傳引用? 二師兄:要看參數(shù)的用途。如果是出參,必須傳引用。如果是入?yún)?,主要考慮參數(shù)類(lèi)型的大小,來(lái)決定傳值還是傳引用。 面試官:為什么不使用指針? 二師兄:傳指針

    2024年02月08日
    瀏覽(24)
  • C++面試八股文:override和finial關(guān)鍵字有什么作用?

    C++面試八股文:override和finial關(guān)鍵字有什么作用?

    某日二師兄參加X(jué)XX科技公司的C++工程師開(kāi)發(fā)崗位第22面: (二師兄好苦逼,節(jié)假日還在面試。。。) 面試官:C++的繼承了解嗎? 二師兄:(不好意思,你面到我的強(qiáng)項(xiàng)了。。)了解一些。 面試官:什么是虛函數(shù),為什么需要虛函數(shù)? 二師兄:虛函數(shù)允許在基類(lèi)中定義一個(gè)函

    2024年02月10日
    瀏覽(20)
  • C++面試八股文:技術(shù)勘誤

    C++面試八股文:技術(shù)勘誤

    不知不覺(jué),《C++面試八股文》已經(jīng)更新30篇了,這是我第一次寫(xiě)技術(shù)博客,由于個(gè)人能力有限,出現(xiàn)了不少紕漏,在此向各位讀者小伙伴們致歉。 為了不誤導(dǎo)更多的小伙伴,以后會(huì)不定期的出勘誤文章,請(qǐng)各位小伙伴留意。 在《C++面試八股文:C++中,設(shè)計(jì)一個(gè)類(lèi)要注意哪些東

    2024年02月11日
    瀏覽(30)
  • C++面試八股文:如何避免死鎖?

    某日二師兄參加X(jué)XX科技公司的C++工程師開(kāi)發(fā)崗位第31面: 面試官:什么是鎖?有什么作用? 二師兄:在C++中,鎖(Lock)是一種同步工具,用于保護(hù)共享資源,防止多個(gè)線程同時(shí)訪問(wèn),從而避免數(shù)據(jù)競(jìng)爭(zhēng)和不一致。 面試官:有哪些鎖? 二師兄:從種類(lèi)上分,可以分為普通鎖、

    2024年02月12日
    瀏覽(28)
  • C++面試八股文:了解位運(yùn)算嗎?

    某日二師兄參加X(jué)XX科技公司的C++工程師開(kāi)發(fā)崗位第12面: 面試官:了解位運(yùn)算嗎? 二師兄:了解一些。(我很熟悉) 面試官:請(qǐng)列舉以下有哪些位運(yùn)算? 二師兄:按位與( )、按位或( | )、按位異或( ^ ),按位取反( ~ )、左移( )和右移( )。 面試官:好的。那你

    2024年02月08日
    瀏覽(24)
  • C++面試八股文:聊一聊指針?

    C++面試八股文:聊一聊指針?

    某日二師兄參加X(jué)XX科技公司的C++工程師開(kāi)發(fā)崗位第17面: 面試官:聊一聊指針? 二師兄:好的。 面試官:你覺(jué)得指針本質(zhì)上是什么? 二師兄:這要從內(nèi)存地址開(kāi)始說(shuō)起了。如果有一塊容量是1G的內(nèi)存,假設(shè)它的地址是從 0x00000000 到 0x3fffffff ,每一個(gè)字節(jié)都對(duì)應(yīng)一個(gè)地址。當(dāng)

    2024年02月09日
    瀏覽(24)
  • C++面試八股文:用過(guò)STL嗎?

    某日二師兄參加X(jué)XX科技公司的C++工程師開(kāi)發(fā)崗位第21面: 面試官:用過(guò)STL嗎? 二師兄:(每天都用好嗎。。)用過(guò)一些。 面試官:你知道STL是什么? 二師兄:STL是指標(biāo)準(zhǔn)模板庫(kù)( Standard Template Library ),是C++區(qū)別于C語(yǔ)言的特征之一。 面試官:那你知道STL的六大部件是什么

    2024年02月09日
    瀏覽(15)
  • java八股文面試[多線程]——什么是守護(hù)線程

    java八股文面試[多線程]——什么是守護(hù)線程

    ?知識(shí)來(lái)源: 【2023年面試】什么是守護(hù)線程_嗶哩嗶哩_bilibili

    2024年02月11日
    瀏覽(27)
  • C++面試八股文:std::vector了解嗎?

    某日二師兄參加X(jué)XX科技公司的C++工程師開(kāi)發(fā)崗位第23面: 面試官: vector 了解嗎? 二師兄:嗯,用過(guò)。 面試官:那你知道 vector 底層是如何實(shí)現(xiàn)的嗎? 二師兄: vector 底層使用動(dòng)態(tài)數(shù)組來(lái)存儲(chǔ)元素對(duì)象,同時(shí)使用 size 和 capacity 記錄當(dāng)前元素的數(shù)量和當(dāng)前動(dòng)態(tài)數(shù)組的容量。如果

    2024年02月10日
    瀏覽(30)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包