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將二維數組賦值給指向一維數組的指針,錯誤