2012.7.4笔试题(c++)
2012-07-05 01:01 梁晓 阅读(173) 评论(0) 编辑 收藏 举报1.栈溢出的原因:
1)申请了过多的局部变量,通常是大容量数组;
2)用了递归,层次过深,使形参、局部变量不断压栈;
3)在栈上动态分配内存的函数 alloca();
4)直接越界写栈空间,从而修改seh链结构或者函数返回地址,这是构造栈溢出最直接的方式
2. 运行时多态和编译时多态
运行时多态是通过虚函数实现,编译多态时通过函数重载或者模板实现。
3.引用的作用
引用到底占不占内存,有许多争论,看这篇帖子
http://topic.csdn.net/t/20041008/22/3435390.html
http://topic.csdn.net/u/20090519/13/0219aaed-23d2-4d44-947c-f3f33f1ff367.html
(1)在引用的使用中,单纯给某个变量取个别名是毫无意义的,引用的目的主要用于在函数参数传递中,解决大块数据或对象的传递效率和空间不如意的问题。
(2)用引用传递函数的参数,能保证参数传递中不产生副本,提高传递的效率,且通过const的使用,保证了引用传递的安全性。
(3)引用与指针的区别是,指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。
(4)使用引用的时机。流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。