前几天参加西门子上海的面试,问到的相关问题记录如下:
1.给函数的默认参数赋值的顺序是怎样的?原理是什么?
第一问答对了,但是原理没说上来。
2.子类继承于父类时,构造函数的调用顺序是什么?请从运行时状态解释原因?
第一问答对,但是不清楚运行时原理
3.virtual malloc?(记不得是不是这个了,反正与malloc有关)
4.构造函数能否声明为virtual?为什么?
不能,原因有以下两个解释:
解释一:所谓虚函数就是多态情况下只执行一个。而从继承的概念来讲,总是要先构造父类对象,然后才能是子类对象。如果构造函数设为虚函数,那么当你在构造父类的构造函数时就不得不显示的调用构造。还有一个原因就是为了防错,试想如果你在子类中一不小心重写了个跟父类构造函数一样的函数,那么你的父类的构造函数将被覆盖,也即不能完成父类的构造.就会出错。
解释二:虚函数的主要意义在于被派生类继承从而产生多态。派生类的构造函数中,编译器会加入构造基类的代码,如果基类的构造函数用到参数,则派生类在其构造函数的初始化列表中必须为基类给出参数,就是这个原因。
虚函数的意思就是开启动态绑定,程序会根据对象的动态类型来选择要调用的方法。然而在构造函数运行的时候,这个对象的动态类型还不完整,没有办法确定它到底是什么类型,故构造函数不能动态绑定。(动态绑定是根据对象的动态类型而不是函数名,在调用构造函数之前,这个对象根本就不存在,它怎么动态绑定?)
编译器在调用基类的构造函数的时候并不知道你要构造的是一个基类的对象还是一个派生类的对象。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lmsnju/archive/2010/03/16/5386617.aspx
5.类中不声明构造函数,系统就会调用系统默认的构造函数。调用系统默认构造函数会有哪些缺陷?
答:当类中含有指针类型的成员变量时,调用系统默认的构造函数可能会出错。因为默认构造函数对成员的初始化采用的是“浅拷贝”,而不是“深拷贝”。(还需要理解)
6.MFC中,send message与post message有什么区别?