C++笔试面试题.doc
上传人:sy****28 上传时间:2024-09-15 格式:DOC 页数:36 大小:415KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

C++笔试面试题.doc

C++笔试面试题.doc

预览

免费试读已结束,剩余 26 页请下载文档后查看

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

1.以下三条输出语句分别输出什么?charstr1[]="abc";charstr2[]="abc";constcharstr3[]="abc";constcharstr4[]="abc";constchar*str5="abc";constchar*str6="abc";cout<<boolalpha<<(str1==str2)<<endl;//输出什么?cout<<boolalpha<<(str3==str4)<<endl;//输出什么?cout<<boolalpha<<(str5==str6)<<endl;//输出什么?答:分别输出false,false,true。str1和str2都是字符数组,每个都有其自己的存储区,它们的值则是各存储区首地址,不等;str3和str4同上,只是按const语义,它们所指向的数据区不能修改。str5和str6并非数组而是字符指针,并不分配存储区,其后的“abc”以常量形式存于静态数据区,而它们自己仅是指向该区首地址的指针,相等。2.以下代码中的两个sizeof用法有问题吗?voidUpperCase(charstr[])//将str中的小写字母转换成大写字母{for(size_ti=0;i<sizeof(str)/sizeof(str[0]);++i)if('a'<=str[i]&&str[i]<='z')str[i]-=('a'-'A');}charstr[]="aBcDe";cout<<"str字符长度为:"<<sizeof(str)/sizeof(str[0])<<endl;UpperCase(str);cout<<str<<endl;答:函数内的sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。函数外的str是一个静态定义的数组,因此其大小为6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4个字节,因此返回4。3.非C++内建型别A和B,在哪几种情况下B能隐式转化为A?答:a.classB:publicA{……}//B公有继承自A,可以是间接继承的b.classB{operatorA();}//B实现了隐式转化为A的转化c.classA{A(constB&);}//A实现了non-explicit的参数为B(可以有其他带默认值的参数)构造函数d.A&operator=(constA&);//赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个4.以下代码有什么问题?structTest{Test(int){}Test(){}voidfun(){}};voidmain(void){Testa(1);a.fun();Testb();b.fun();}答:变量b定义出错。按默认构造函数定义对象,不需要加括号。5.以下代码有什么问题?cout<<(true?1:"1")<<endl;答:三元表达式“?:”问号后面的两个操作数必须为同一类型。6.以下代码能够编译通过吗,为什么?unsignedintconstsize1=2;charstr1[size1];unsignedinttemp=0;cin>>temp;unsignedintconstsize2=temp;charstr2[size2];答:str2定义出错,size2非编译器期间常量,而数组定义要求长度必须为编译期常量。7.以下反向遍历array数组的方法有什么错误?vectorarray;array.push_back(1);array.push_back(2);array.push_back(3);for(vector::size_typei=array.size()-1;i>=0;--i)//反向遍历array数组{cout<<array[i]<<endl;}答:首先数组定义有误,应加上类型参数:vector<int>array。其次vector::size_type被定义为unsignedint,即无符号数,这样做为循环变量的i为0时再减1就会变成最大的整数,导致循环失去控制。8.以下代码中的输出语句输出0吗,为什么?structCLS{intm_i;CLS(inti):m_i(i){}CLS(){CLS(0);}};CLSobj;cout<<obj.m_i<<endl;答:不能。在默认构造函数内部再调用带参的构造函数属用户行为而非编译器行为,亦即仅执行函数调用,而不会执行其后的初始化表达式。只有在生成对象时,