C++面试题荟萃3
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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论