關於C++/C的一些知識點整理 (2)

1.

       static成員變量是在類加載的時候生成的

       static成員函數既可以通過類名直接調用,也可以通過對象名進行調用

       虛函數是C++中的,虛函數不可能是static的

       static成員函數可以訪問static成員變量

2.      

        enum中:首元素不賦值的話,默認爲0;後一個元素不賦值的話比前一個元素大1

         enum{a, b=5, c, d=4, e} k;

 默認a=0,既然b=5,根據那麼枚舉類型的後一個元素在不賦值的情況下,比前一個元素大1,那麼c默認爲6,d=         4,e默認爲5

3.

          

       A選項 如果一個類中聲明瞭純虛函數,其派生類中沒有對該函數定義,那該函數在派生類中仍爲純虛函數,凡是包含純虛函          數的類都是抽象類。

       B選項 通常重載函數調用的依據是函數名、參數類型、參數個數。.

       C選項 靜態數據成員是所有對象所共有的,所以C錯

       D選項 應該是編譯時,而不是運行時。

4.

代碼執行後,a和b的值分別爲?

class Test{
public:
    int a;
    int b;
    virtual void fun() {}
    Test(int temp1 = 0, int temp2 = 0)
    {
        a=temp1 ;
        b=temp2 ;
    }
    int getA()
    {
        return a;
    }
    int getB()
    {
        return b;
    }
};
 
int main()
{
    Test obj(5, 10);
    // Changing a and b
    int* pInt = (int*)&obj;
    *(pInt+0) = 100;  
    *(pInt+1) = 200;  
    cout << "a = " << obj.getA() << endl;
    cout << "b = " << obj.getB() << endl;
    return 0;
}

        答案:a=200 b=10;

        解析:需要考慮虛函數表,指向虛函數表的指針在32位系統下佔用4個字節,其地址分佈在整個類成員變量的地址的首部,接下來就是變量a的地址、b的地址。當將test對象obj賦給指向整型的pInt後,指針pInt指向了地址的首部也就是虛函數表指針,所以*(pInt+0)=100改變的是虛函數表的值,接下來*(pInt+1)=200改變的是變量a的值,變量b沒有變換。

5.

        解析:構造函數可以重載,自然有含參構造函數。

       構造函數和析構函數聲明定義的時候,都是無類型的,不能添加 void.

       析構函數的目的是釋放對象自身內存,只能管理自己,不需要對外通信,自然不需要參數了。

6.STL中的unordered_map(哈希map)和priority_queue(優先級隊列)使用的底層數據結構分別是:hashtable,heap(堆)。

7.

         答案:124;

        解析:1將二維數組賦給了指針,錯誤。

        2將一維數組的指針賦值給一個指針,錯誤。(應改爲p=*k)

        4將二維數組賦值給指向一維數組的指針,錯誤

發佈了35 篇原創文章 · 獲贊 18 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章