97超碰碰碰_91热播_91国产免费视频_91视频合集_国产精品白丝jk白祙_国产精品久免费的黄网站

您現(xiàn)在所在的位置:首頁 >學(xué)員就業(yè) > 就業(yè)寶典 > 經(jīng)典C++面試題,看看你會多少?(一)

經(jīng)典C++面試題,看看你會多少?(一)

來源:奇酷教育 發(fā)表于:

題目(一):我們可以用static修飾一個類的成員函數(shù),也可以用const修飾類的成員函數(shù)(寫在函數(shù)的最后表示不能修改成員變量,不是指寫在前

題目(一):我們可以用static修飾一個類的成員函數(shù),也可以用const修飾類的成員函數(shù)(寫在函數(shù)的最后表示不能修改成員變量,不是指寫在前面表示返回值為常量)。請問:能不能同時用staticconst修飾類的成員函數(shù)?

分析:答案是不可以。C++編譯器在實(shí)現(xiàn)const的成員函數(shù)的時候?yàn)榱舜_保該函數(shù)不能修改類的實(shí)例的狀態(tài),會在函數(shù)中添加一個隱式的參數(shù)const this*。但當(dāng)一個成員為static的時候,該函數(shù)是沒有this指針的。也就是說此時static的用法和static是沖突的。

我們也可以這樣理解:兩者的語意是矛盾的。static的作用是表示該函數(shù)只作用在類型的靜態(tài)變量上,與類的實(shí)例沒有關(guān)系;而const的作用是確保函數(shù)不能修改類的實(shí)例的狀態(tài),與類型的靜態(tài)變量沒有關(guān)系。因此不能同時用它們。

題目(二):運(yùn)行下面的代碼,輸出是什么?

class A

{

};

 

class B

{

public:

        B() {}

        ~B() {}

};

 

class C

{

public:

        C() {}

        virtual ~C() {}

};

 

int _tmain(int argc, _TCHAR* argv[])

{

        printf("%d, %d, %d\n"sizeof(A), sizeof(B), sizeof(C));

        return 0;

}

分析:答案是1, 1, 4class A是一個空類型,它的實(shí)例不包含任何信息,本來求sizeof應(yīng)該是0。但當(dāng)我們聲明該類型的實(shí)例的時候,它必須在內(nèi)存中占有一定的空間,否則無法使用這些實(shí)例。至于占用多少內(nèi)存,由編譯器決定。Visual Studio 2008中每個空類型的實(shí)例占用一個byte的空間。

class Bclass A的基礎(chǔ)上添加了構(gòu)造函數(shù)和析構(gòu)函數(shù)。由于構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用與類型的實(shí)例無關(guān)(調(diào)用它們只需要知道函數(shù)地址即可),在它的實(shí)例中不需要增加任何信息。所以sizeof(B)sizeof(A)一樣,在Visual Studio 2008中都是1

class Cclass B的基礎(chǔ)上把析構(gòu)函數(shù)標(biāo)注為虛擬函數(shù)。C++的編譯器一旦發(fā)現(xiàn)一個類型中有虛擬函數(shù),就會為該類型生成虛函數(shù)表,并在該類型的每一個實(shí)例中添加一個指向虛函數(shù)表的指針。在32位的機(jī)器上,一個指針占4個字節(jié)的空間,因此sizeof(C)4

題目(三):運(yùn)行下面中的代碼,得到的結(jié)果是什么

class A

{

private:

        int m_value;

 

public:

        A(int value)

        {

                m_value = value;

        }

        void Print1()

        {

                printf("hello world");

        }

        void Print2()

        {

                printf("%d", m_value);

        }

};

 

int _tmain(int argc, _TCHAR* argv[])

{

        A* pA = NULL;

        pA->Print1();

        pA->Print2();

 

        return 0;

}

分析:答案是Print1調(diào)用正常,打印出hello world,但運(yùn)行至Print2時,程序崩潰。調(diào)用Print1時,并不需要pA的地址,因?yàn)?/span>Print1的函數(shù)地址是固定的。編譯器會給Print1傳入一個this指針,該指針為NULL,但在Print1中該this指針并沒有用到。只要程序運(yùn)行時沒有訪問不該訪問的內(nèi)存就不會出錯,因此運(yùn)行正常。在運(yùn)行print2時,需要this指針才能得到m_value的值。由于此時this指針為NULL,因此程序崩潰了。

題目(四):運(yùn)行下面中的代碼,得到的結(jié)果是什么

class A

{

private:

        int m_value;

 

public:

        A(int value)

        {

                m_value = value;

        }

        void Print1()

        {

                printf("hello world");

        }

        virtual void Print2()

        {

                printf("hello world");

        }

};

 

int _tmain(int argc, _TCHAR* argv[])

{

        A* pA = NULL;

        pA->Print1();

        pA->Print2();

 

        return 0;

}

分析:答案是Print1調(diào)用正常,打印出hello world,但運(yùn)行至Print2時,程序崩潰。Print1的調(diào)用情況和上面的題目一樣,不在贅述。由于Print2是虛函數(shù)。C++調(diào)用虛函數(shù)的時候,要根據(jù)實(shí)例(即this指針指向的實(shí)例)中虛函數(shù)表指針得到虛函數(shù)表,再從虛函數(shù)表中找到函數(shù)的地址。由于這一步需要訪問實(shí)例的地址(即this指針),而此時this指針為空指針,因此導(dǎo)致內(nèi)存訪問出錯。

題目(五):靜態(tài)成員函數(shù)能不能同時也是虛函數(shù)

分析:答案是不能。調(diào)用靜態(tài)成員函數(shù)不要實(shí)例。但調(diào)用虛函數(shù)需要從一個實(shí)例中指向虛函數(shù)表的指針以得到函數(shù)的地址,因此調(diào)用虛函數(shù)需要一個實(shí)例。兩者相互矛盾。

主站蜘蛛池模板: 少妇放荡的呻吟干柴烈火动漫 | 久久久久综合网 | 亚洲欧美熟妇综合久久久久 | 中国成人在线视频 | 美女黄18以下禁止观看 | 久久精品中文字幕无码绿巨人 | 国产台湾无码av片在线观看 | 久久精品2019www中文 | 国产成人精品a视频 | 国产原创91 | 欧美午夜一区二区福利视频 | 亚洲国产精品乱码一区二区三区 | 在线视频 一区二区 | 国自产拍在线视频天天更新 | 久久er这里都是精品23 | 国产综合久久久久影院 | 色婷婷久久久swag精品 | 国产精品成人精品久久久 | 大屁女人黄大片 | 天天看夜夜操 | 少妇人妻偷人精品一区二区 | 国产免费看插插插视频 | 亚洲精品欧美精品国产精品 | 国产精品99久久精品 | 亚洲一区二区免费在线观看 | 亚洲伊人久久精品酒店 | 免费黄色一级视频 | 国产成人精品三级麻豆 | 成 人 色 网 站免费观看 | 伊人网综合在线视频 | www日韩中文字幕在线看 | 亚洲天堂第一页 | 亚洲天堂视频在线观看 | 国产精品国产精品国产专区不卡 | 四虎国产 | 无码人妻精品一区二区三区66 | 精品美女激情视频线播放 | 亚洲国产精品欧美综合 | 精品亚洲麻豆1区2区3区 | 亚洲乱色熟女一区二区三区丝袜 | 久久久久久久久网站 |