一个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#,都是不容许的。若是有大神能指导缘由,不胜感激。在知道合理的缘由以前,我会禁止这个写法。函数

我如今不太问这种编程语言细节的东西了,由于我想通了一件事,熟悉编程语言细节未必真的熟悉计算机科学,而熟悉计算机科学又未必能写好功能逻辑代码;我最终但愿能找到的是一个能写好逻辑作好功能的人;这形成了我如今的困惑点,怎么判断来面试的人能写好逻辑呢?设计

相关文章
相关标签/搜索