本文整理自經典博客《C++基礎知識面試精選100題系列(1-10題)》,針對前十題進行深度解析,幫助讀者掌握 C++ 核心機制。
答案:不能。 const 成員函數隱含 const this* 參數,而 static 成員函數沒有 this 指針,兩者語義衝突。
VS2008 下:sizeof(A)=1、sizeof(B)=1、sizeof(C)=4。虛函數引入虛表指針,導致大小變為指針大小。
若函數內未使用成員變數(如 Print1),調用不會崩潰;若訪問成員(如 Print2),則因解引用空指針而崩潰。
虛函數調用需通過虛表指針,必須解引用 this,因此空指針調用虛函數必崩潰。
不能。靜態函數無 this,虛函數調用依賴實例的虛表指針,兩者矛盾。
&pPoint->z 僅計算偏移,不訪問內存,輸出 8(假設 int 4 字節,z 為第三個成員)。
構造時調用基類版本,析構時調用當前類版本。輸出順序演示了多態在構造/析構階段的行為差異。
ToUpper()、Insert() 返回新字符串,原字符串不變,故輸出仍為 "hello"。
靜態構造先初始化靜態字段,再執行靜態構造體;實例構造先初始化實例字段,再執行實例構造體。輸出順序為 a1、a3、a2、a4。