一個C++面試題目

在我還以一個C++程序員自居的時候,面試別的C++程序員我常常問一道問題是這樣的,考慮在不一樣狀況下,下面這段代碼的執行狀況程序員

class A;

int main()
{
    A* a = 0;
    a->func();
    
    return 0;
}

我不記得這個題目的出處了,就當是我本身原創的吧;這個題目的經過率不是特別高,在我面試過的初級程序員中,可能一半都不到。相對來講,我仍是一個比較nice的考官,首先表如今我不以最終答案做爲斷定結果,若是有合理的分析過程,就算是最後答錯了我也算經過,其次若是面試的人卡殼了,我也會給一些提示,給一些用例來分析;面試

而後答案是這樣的編程

  • 若是func是個static函數,那麼效果和調用A::func();是同樣的,正常執行;
  • 若是func是個虛函數,會訪問非法內存地址,通常會crash;
  • 若是func是非虛函數
    • 若是func函數不訪問成員變量,正常執行
    • 若是func函數訪問了成員變量,會訪問非法內存地址,通常會crash;

這個題目的用意,首先是做爲一個C++程序員,有必要能列舉出一樣叫作函數的,到底有多少種類型;其實無非也就是靜態函數和成員函數,成員函數分虛函數和非虛函數;其次,虛函數和非虛函數的調用機制和效果;而後是類的成員變量怎麼存儲和訪問。編程語言

靜態函數能夠用對象的指針來調用,這個我也是後來才知道,算是很苦的語法糖?我不知道C++這麼設計的意圖是什麼,語法上更嚴謹的面嚮對象語言,好比Java和C#,都是不容許的。若是有大神能指導緣由,不勝感激。在知道合理的緣由以前,我會禁止這個寫法。函數

我如今不太問這種編程語言細節的東西了,由於我想通了一件事,熟悉編程語言細節未必真的熟悉計算機科學,而熟悉計算機科學又未必能寫好功能邏輯代碼;我最終但願能找到的是一個能寫好邏輯作好功能的人;這形成了我如今的困惑點,怎麼判斷來面試的人能寫好邏輯呢?設計

相關文章
相關標籤/搜索