平板wps使用技巧:C++面试题荟萃3

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 14:13:12
1、  下面的程序是否有错误,如果有错,请说明原因。
struct A1 { int i; };
A1 a1;
a1.i = 0;
           没有错误
class A1 { int i;};
A1 a1;
a1.i = 0;
有错误,未显示权限定义符缺省为private。
 
2、  下面程序是否有错,有错,请说明原因。:
char szTest[] = “hello”;
char* const psz = szTest;
psz[0] = ‘b’;
           没有错误,psz指向的字符串指针是常量,指针不能被修改,但指针指向的内容可以修改
 
3、  在继承层次上,构造函数和析构函数的调用顺序如何?
构造函数:先基类,后派生类
析构函数:先派生类,后基类
 
4、  如果一个包容器中包含指向对象的指针,当从包容器中删除某个指针时,会析构该指针指向的对象吗?
包容器并不关心存放对象的类型,所以从包容器中删除成员时,仅仅只是从容器中释放该成员占有的空间。如果该成员是一个指向某个对象的指针,由用户保证指针指向对象的内存释放。
 
5、  如何阻止构造函数的自动转换
首先要理解什么是构造函数的自动转换。
比如有 
class A {….};
class B { B(A&) {…};};
func(B) {};
main() 
{
     A a;
     Func(a);
}
在调用Func(a)时,会自动调用B(A&)构造函数,保证传给Func的参数是B类型。应该采用explicit关键字来防止构造函数的自动转换。
 
6、  类的成员函数作为回调函数有什么要求?
必须是静态成员函数。
 
7、  分析代码,给出i, j ,k的结果。
int i = 0, j = 0; k = 0;
if (++i || j++ || ++k ) {}
         主要是注意前置操作符和后置操作符的区别,还要考虑 或操作 在条件判断中的实现(如果一个为真,则不进行后续判断)。
         i = 1, j = 0, k = 0