C++面试

C++面试C++面试

大家好,又见面了,我是你们的朋友全栈君。

1、以下三条输出语句分别输出什么?【基础】

char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char* str5 = "abc";
const char* str6 = "abc";
cout << boolalpha << (str1==str2) << endl; //输出什么?
cout << boolalpha << (str3==str4) << endl; //输出什么?
cout << boolalpha << (str5==str6) << endl; //输出什么?

答:输出为:false、false、true。

2、以下反向遍历array 数组的方法有什么错误?【基础】

vector<int> array;
array.push_back(1);
array.push_back(2);
array.push_back(3);
//反向遍历array 数组:
for(vector<int>::size_type i=array.size()-1; i>=0; --i){
cout << array[i] << endl;
}

答:for 循环中的变量i 的类型不应定义为vector::size_type,
因为该类型为无符号数值类型,故循环条件将恒成立,为死循环,应将其类型定义为有符号的int 类型。

3、以下代码有什么问题?【基础】

cout << (true ? 1 : "1") << endl;

答:运算符中两个可选值的类型不同。
4、以下代码有什么问题?【基础】

typedef vector<int> IntArray;
IntArray array;
array.push_back(1);
array.push_back(2);
array.push_back(2);
array.push_back(3);
//删除array 数组中所有的2
for(IntArray::iterator itor=array.begin(); itor!=array.end();
++itor){
if(2==*itor) {
array.erase(itor);
}
}

答:for 循环中的if 语句后的array.erase(itor)语句,它将迭代器itor 所指向的元素删除后会自动下移一位,故应在其后加上语句:itor–;

5、以下代码中的两个sizeof 用法有问题吗?【基础】

void upperCase(char str[]){ //将str 中的小写字母转换成大写字母
for(int i=0; i<sizeof(str)/sizeof(str[0]); ++i){
if('a'<=str[i] && str[i]<='z')
str[i] -= ('a'-'A');
}
}
int main(){
char str[] = "aBcDe";
cout << "str 字符串长度为:" << sizeof(str)/sizeof(str[0]);
cout << endl;
upperCase(str);
cout << str << endl;
return 0;
}

答:在upperCase 方法中,for 循环的sizeof(str)的值将总是4,所以该方法
只能将参数中的字符串的前四个字符转换成大写字母。

6、以下代码能够编译通过吗?为什么?【基础】

unsigned int const size1 = 2;
char str1[size1];
unsigned int temp = 0;
cin >> temp;
unsigned int const size2 = temp;
char str2[size2];

答:能;

7、以下代码有什么问题?【基础】

struct Test{
Test(int){}
Test(){}
void fun(){}
};
void main(void){
Test a(1);
a.fun();
Test b();
b.fun();
}

答:main 函数的返回类型应为int;不能对b 调用fun()方法。

8、以下代码中的输出语句输出0 吗?为什么?【基础】

struct CLS{
int m_i;
CLS(int i):m_i(i){ }
CLS(){ CLS(0);}
};
int main(){
CLS obj;
cout <<obj.m_i << endl;
}

答:输出不是0;

9、C++中的空类,默认产生哪些类成员函数?【基础】

答:空类中默认包含的成员函数如下:

class Empty{
public:
Empty(); //缺省构造函数
Empty( const Empty& ); //拷贝构造函数
~Empty(); //析构函数
Empty& operator=( const Empty& ); //赋值运算符
Empty* operator&(); //取址运算符
const Empty* operator&() const; //取址运算符const
};

10、统计一篇文章中单词个数。【基础】

答:代码如下:

include<iostream>
#include<fstream>
using namespace std;
int main(){
ifstream fin("t.txt");
if(!fin){
cout<<"can't open file"<<endl;
return -1;
}
int count = 0;
char buf[256];
memset(buf, 0, 256);
while(1){
fin2>>buf;
if(fin2.eof())
break;
count++;
}
cout<<"The number of the words is : "<<count<<endl;
fin2.close();
return 0;
}

11、写一个函数,完成内存之间的拷贝。【中等难度】

答:代码如下:

void* mymemcpy(void* dest, const void* src, size_t count){
char* pdest = static_cast<char*>(dest);
const char* psrc = static_cast<const char*>(src);
if(pdest>psrc && pdest<psrc+count){ //能考虑到这种情况就行了
for(size_t i=count-1; i!=-1; --i){
pdest[i] = psrc[i];
}
}else{
for(size_t i=0; i<count; ++i){
pdest[i] = psrc[i];
}
}
return dest;
}
int main(){
char str[] = "0123456789";
mymemcpy(str+1, str+0, 9);
cout << str << endl; //将输出"0012345678"
return 0;
}

12、非C++内建类型A 和B,在哪几种情况下B 能隐式转化为A?【较难】

答:a)class B : public A{……}//B 公有继承自A,可以是间接继承的
b)class B{operator A();}//B 实现了隐式转化为A 的转化
c)class A{ A(const B&);}//A 实现了non-explicit 的参数为B 构造函数(可以有其他带带默认值的参数)
d)A& operator= (const A&);//赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个

13、以下代码有什么问题?【较难】

void char2Hex(char c){ //将字符以16 进制显示
char ch = c/0x10 + '0';
if(ch>'9') ch += ('A'-'9'-1);
char cl = c%0x10 + '0';
if(cl>'9') cl += ('A'-'9'-1);
cout << ch << cl << ' ';
}
int main(){
char str[] = "I love 中国";
for(size_t i=0; i<strlen(str); ++i)
char2Hex(str[i]);
cout << endl;
return 0;
}

答:
13、以下两条输出语句分别输出什么?【较难】

float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ((int)a==(int&)a) << endl; //输出什么
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ((int)b==(int&)b) << endl;//输出什么

答:第一处输出false,第二处输出true。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106568.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Kettle工具使用及总结

    Kettle工具使用及总结Kettle工具使用及总结,kettle主要用于数据清洗,即常见ETL工具,拥有图形化界面且免费的优点。其下载包直接解压打开就能用,遇到的问题:1.连接MySQL报错:①报错:Driverclass’org.gjt.mm.mysql.Driver’couldnotbefound,makesurethe’MySQL’driver(jarfile)isinstalled.org.gjt.mm.mysql.Driver原因:没有识别

    2022年10月17日
    4
  • JavaScript Array splice() 方法

    JavaScript Array splice() 方法语法array.splice(index,howmany,item1,…..,itemX)实例在位置2,添加新项目,并删除1个项目:varfruits=[“Banana”,”Orange”,”Apple”,”Mango”];fruits.splice(2,1,”Lemon”,”Kiwi”);在位置2,添加新项目varfruits=[“Banana”,”Orange”,”Apple”,”Mango”];fruits.s.

    2022年7月13日
    20
  • SPSS(十五)spss之聚类分析(图文+数据集)[通俗易懂]

    SPSS(十五)spss之聚类分析(图文+数据集)[通俗易懂]SPSS(十五)spss之聚类分析(图文+数据集)聚类分析简介按照个体(记录)的特征将它们分类,使同一类别内的个体具有尽可能高的同质性,而类别之间则具有尽可能高的异质性。为了得到比较合理的分类,首先要采用适当的指标来定量地描述研究对象之间的联系的紧密程度。假定研究对象均用所谓的“点”来表示。在聚类分析中,一般的规则是将“距离”较小的点归为同一类,将“距离”较大的点归为不同的类。常见…

    2022年10月18日
    4
  • idea打不开,双击没反应的解决方案

    idea双击打不开,没反应1.找到idea安装根目录bin下,选中idea.bat右键编辑,或者使用txt打开2.在idea.bat最后一行添加pause打印报错信息如图3.保存关闭,双击运行idea.bat4.会显示报错信息,如图下5.根据错误信息找到配置路径错误6.找到c盘C:\Users\ThinkPad\下设置显示隐藏的项目这样我们就能找到AppDate文件夹了7.找到路径下idea64.exe.vmoptions文件…

    2022年4月5日
    228
  • UGUI合批drawcall高的原因「建议收藏」

    UGUI合批drawcall高的原因「建议收藏」各个UI界面Batches高的原因通用原因1.UI重叠打断合批增加一倍的drawcall特别是列表里面的重叠https://zhuanlan.zhihu.com/p/431118062.空图片例如ScrollRect已经下面的View可考虑使用空的Text或者写一个类继承MaskableGraphic不绘制使用UpdateGeometry不绘制3.都是散图可考虑系统按钮作为一个图集活动图标作为一个图集…

    2026年1月21日
    2
  • gcc编译器如何使用_gcc编译器用什么语言写的

    gcc编译器如何使用_gcc编译器用什么语言写的一、gcc编译流程GCC编译器在编译一份C代码的时候,需要经过以下4个步骤:预处理(preprocessing):对.c源文件进行预处理,生成.i文件。编译(compilation):对

    2022年8月4日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号