?? c++面試題-3.txt
字號:
1、 下面的程序是否有錯誤,如果有錯,請說明原因。
struct A1 { int i; };
A1 a1;
a1.i = 0;
沒有錯誤
class A1 { int i;};
A1 a1;
a1.i = 0;
有錯誤,未顯示權限定義符缺省為private。
2、 下面程序是否有錯,有錯,請說明原因。:
char szTest[] = "hello";
char* const psz = szTest;
psz[0] = 'b';
沒有錯誤,psz指向的字符串指針是常量,指針不能被修改,但指針指向的內容可以修改
3、 在繼承層次上,構造函數和析構函數的調用順序如何?
構造函數:先基類,后派生類
析構函數:先派生類,后基類
4、 如果一個包容器中包含指向對象的指針,當從包容器中刪除某個指針時,會析構該指針指向的對象嗎?
包容器并不關心存放對象的類型,所以從包容器中刪除成員時,僅僅只是從容器中釋放該成員占有的空間。如果該成員是一個指向某個對象的指針,由用戶保證指針指向對象的內存釋放。
5、 如何阻止構造函數的自動轉換
首先要理解什么是構造函數的自動轉換。
比如有
class A {….};
class B { B(A&) {…};};
func(B) {};
main()
{
A a;
Func(a);
}
在調用Func(a)時,會自動調用B(A&)構造函數,保證傳給Func的參數是B類型。應該采用explicit關鍵字來防止構造函數的自動轉換。
6、 類的成員函數作為回調函數有什么要求?
必須是靜態成員函數。
7、 分析代碼,給出i, j ,k的結果。
int i = 0, j = 0; k = 0;
if (++i || j++ || ++k ) {}
主要是注意前置操作符和后置操作符的區別,還要考慮 或操作 在條件判斷中的實現(如果一個為真,則不進行后續判斷)。
i = 1, j = 0, k = 0
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -