• 一个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#,都是不允许的。如果有大神能指导原因,不胜感激。在知道合理的原因之前,我会禁止这个写法。

    我现在不太问这种编程语言细节的东西了,因为我想通了一件事,熟悉编程语言细节未必真的熟悉计算机科学,而熟悉计算机科学又未必能写好功能逻辑代码;我最终希望能找到的是一个能写好逻辑做好功能的人;这造成了我现在的困惑点,怎么判断来面试的人能写好逻辑呢?

  • 相关阅读:
    使用数字进行字符遍历
    注意:C++中double的表示是有误差的
    ER模型到关系模型的转换规则
    SQL中查询优化的主要策略
    分解成3NF保持函数依赖且为无损连接的算法
    函数依赖集闭包、属性集闭包、超键、候选键和最小函数依赖集的求法。
    分解成3NF的保持函数依赖的分解算法:
    模式分解是否为无损连接的判断方法
    字符串处理技巧
    sort+结构体实现二级排序
  • 原文地址:https://www.cnblogs.com/linnguo/p/5125403.html
Copyright © 2020-2023  润新知