国产成+人+综合+亚洲 欧美-国产成+人+综合+亚洲专-国产成+人欧美+综合在线观看-国产成a人片在线观看视频-国产成a人片在线观看视频99-国产成a人片在线观看视频下载

您現在所在的位置:首頁 >學員就業 > 就業寶典 > 經典C++面試題,看看你會多少?(一)

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

來源:奇酷教育 發表于:

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

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

分析:答案是不可以。C++編譯器在實現const的成員函數的時候為了確保該函數不能修改類的實例的狀態,會在函數中添加一個隱式的參數const this*。但當一個成員為static的時候,該函數是沒有this指針的。也就是說此時static的用法和static是沖突的。

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

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

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是一個空類型,它的實例不包含任何信息,本來求sizeof應該是0。但當我們聲明該類型的實例的時候,它必須在內存中占有一定的空間,否則無法使用這些實例。至于占用多少內存,由編譯器決定。Visual Studio 2008中每個空類型的實例占用一個byte的空間。

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

class Cclass B的基礎上把析構函數標注為虛擬函數。C++的編譯器一旦發現一個類型中有虛擬函數,就會為該類型生成虛函數表,并在該類型的每一個實例中添加一個指向虛函數表的指針。在32位的機器上,一個指針占4個字節的空間,因此sizeof(C)4

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

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調用正常,打印出hello world,但運行至Print2時,程序崩潰。調用Print1時,并不需要pA的地址,因為Print1的函數地址是固定的。編譯器會給Print1傳入一個this指針,該指針為NULL,但在Print1中該this指針并沒有用到。只要程序運行時沒有訪問不該訪問的內存就不會出錯,因此運行正常。在運行print2時,需要this指針才能得到m_value的值。由于此時this指針為NULL,因此程序崩潰了。

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

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調用正常,打印出hello world,但運行至Print2時,程序崩潰。Print1的調用情況和上面的題目一樣,不在贅述。由于Print2是虛函數。C++調用虛函數的時候,要根據實例(即this指針指向的實例)中虛函數表指針得到虛函數表,再從虛函數表中找到函數的地址。由于這一步需要訪問實例的地址(即this指針),而此時this指針為空指針,因此導致內存訪問出錯。

題目(五):靜態成員函數能不能同時也是虛函數

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

主站蜘蛛池模板: 国产精品久久国产三级国电话系列 | 无遮挡又黄又爽又色的视频免费 | 亚洲综合国产 | 久久成人在线观看 | 四虎影视4hutv最新地址在线 | 久久免费在线观看 | 青青青在线视频人视频在线 | 老司机免费福利影院 | 国产人成激情视频在线观看 | 99视频精品全部 在线 | 天海翼一区二区三区免费 | 大学生不戴套毛片视频 | 欧美成人禁片在线观看网址 | 日韩欧美亚洲国产高清在线 | 日韩a在线播放 | 欧美日韩一级大片 | 在线不卡一区二区 | 欧美综合图片 | 中文字幕精品亚洲无线码二区 | 国产精品免费一区二区三区四区 | 久热最新 | 精品国产一区二区三区久久 | 欧美日韩亚洲国产无线码 | 91成人在线免费视频 | 亚洲精品视频一区 | 青青青爽在线视频观看大全 | 性欧美日韩 | 亚洲综合一区二区 | 亚洲精品美女在线观看 | 亚洲国产人久久久成人精品网站 | chinese性中国女人 | 88精品视频 | 亚洲国产综合专区在线播一一 | 欧美性大战久久久久久久蜜桃 | 97在线观看成人免费视频 | 四虎国产精品永久地址51 | 日本一区二区三区高清在线观看 | 7m凹凸国产刺激在线视频 | 日本三级中文 | 国产成人在线视频观看 | 日日干日日射 |