100条经典C++笔试题目及答案分享 - CSDN博客
文章推薦指數: 80 %
100条经典C++笔试题目分享一、C++与C差异(1-18)二、数据类型、关键字(19-37)三、C++面向对象的特性(38-61)四、程序阅读题(62-90)五、编程练习(91-100) ...
100条经典C++笔试题目及答案分享
PennLi
于 2020-03-3023:24:40 发布
40512
收藏
793
分类专栏:
C/C++
文章标签:
c++
版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44903147/article/details/104870057
版权
C/C++
专栏收录该内容
2篇文章
5订阅
订阅专栏
100条经典C++笔试题目分享
一、C++与C差异(1-17)二、数据类型、关键字(18-37)三、C++面向对象的特性(38-61)四、程序阅读题(62-89)五、编程练习(90-100)
看到好用的经典C++题目,对机试和笔试,甚至面试都有帮助,特意分享,自己也复习一遍,互勉。
题目来源:
1、中兴、华为、慧通、英华达、微软亚洲技术中心等中外企业面试题目;
2、C++面试宝典(林锐《高质量编程第三版》)、C++primer、ThinkinginC++。
一、C++与C差异(1-17)
1.C和C++中struct有什么区别?【答案】
Protection行为能否定义函数c无否,但可以有函数子针c++有,默认private可以
2.C++中的struct和class有什么区别?【答案】从语法上讲,class和struct做类型定义时只有两点区别:(1)默认继承权限。
如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理;(2)成员的默认访问权限。
class的成员默认是private权限,struct默认是public权限。
除了这两点,class和struct基本就是一个东西。
语法上没有任何其它区别。
(敲黑板:继承和访问权限不同,struct为public,class为private)
3.如何判断一段程序是由C编译程序还是由C++编译程序编译的?【答案】运用编译标志宏,窗体直接运行以下代码:
#include
但是,c++编写面向对象的程序比c容易。
适用方向:c适合要求代码体积小的,效率高的场合,如嵌入式;c++适合更上层的,复杂的;llinux核心大部分是c写的,因为它是系统软件,效率要求极高。
名称:c++比c多了+,说明c++是c的超集;那为什么不叫c+而叫c++呢,是因为c++比c来说扩充的东西太多了,所以就在c后面放上两个+;于是就成了c++。
总之,C语言是结构化编程语言,C++是面向对象编程语言。
C++侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。
5.“引用”与指针的区别是什么?【答案】指针是存储变量内容的地址,指针操作是通过某个指针变量指向一个对象后,对它所指向的变量间接操作,也就是地址间的操作,程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。
6.classA{virtualvoidfunc1();voidfunc2();};classB:classA{voidfunc1(){cout<65536){
cout<接口继承以及纯虚函数)构成了功能复用的两种方式。
(3)多态:是将父对象设置成为和一个或更多的与他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
39.重载(overload)、重写(override,有的书也叫做“覆盖”)、重定义(redefinition)的区别?【答案】
名称名字空间区别重载同一名字子空间是指允许存在多个同名函数,而这些函数的参数表不同。
重定义/隐藏不同名字子空间用于继承,派生类与基类的函数同名,屏蔽基类的函数重写/覆盖不同名字子空间用于继承,子类重新定义父类虚函数的方法
40.多态的作用?【答案】主要是两个:(1)隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;(2)接口重用:为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。
41.当一个类A中没有声命任何成员变量与成员函数,这时sizeof(A)的值是多少,如果不是零,请解释一下编译器为什么没有让它为零。
【答案】sizeof(A)=1。
编译器不允许一个类的大小为0,会为它分配1字节的内存。
若不这样做,那2个类A的实例在内存中将会无法区分。
一个空类对象的大小是1byte。
这是被编译器安插进去的一个字节,这样就使得这个空类的两个实例得以在内存中配置独一无二的地址。
42.如果ClassA中定义并实现虚函数intfunc(void),ClassB中也实现该函数,那么上述变量a->func()将调用哪个类里面的函数?如果intfunc(void)不是虚函数,情况又如何?为什么?【答案】第一问调用的是B的。
第二问调用A的。
虚函数的一个典型应用,虚函数只能借助于指针或者引用来达到多态的效果。
43.C++里面是不是所有的动作都是main()引起的?如果不是,请举例。
【答案】比如全局变量的初始化,就不是由main函数引起的。
举例:
classA{};
Aa;//a的构造函数限执行
intmain(){}
44.内联函数在编译时是否做参数类型检查【答案】内联函数要做参数类型检查,这是内联函数跟宏相比的优势。
45.请讲一讲析构函数和虚函数的用法和作用?【答案】析构函数是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只有在类对象的生命期结束的时候,由系统自动调用,有释放内存空间的作用。
虚函数是C++多态的一种表现,使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价。
46.“new”inc++isa:A.libraryfunctionlikemallocincB.keywordC.operatorD.noneoftheabove【答案】C。
malloc是库函数,不在编译器控制范围之内;new是运算符,在编译器控制范围之内。
调用malloc时,从堆中申请内存;调用new时,从堆中申请内存并为内存调用构造函数。
47.对于C++中类(class)与结构(struct)的描述正确的为:A.类中的成员默认是private的,但是可以声明public,private和protected,结构中定义的成员默认的都是public;B.结构中不允许定义成员函数,但是类中可以定义成员函数;C.结构实例使用malloc()动态创建,类对象使用new操作符动态分配内存;D.结构和类对象都必须使用new创建;E.结构中不可以定义虚函数,但是类中可以定义虚函数.F.结构不可以存在继承关系,但是类可以存在继承关系.【答案】A,D
48.两个互相独立的类:ClassA和ClassB,都各自定义了非静态的公有成员函数PublicFunc()和非静态的私有成员函数PrivateFunc();现在要在ClassA中增加定义一个成员函数ClassA::AdditionalPunction(ClassAa,ClassBb);则可以在AdditionalPunction(ClassAx,ClassBy)的实现部分(函数功能体内部)出现的合法的表达是最全的是:A、x.PrivateFunc();x.PublicFunc();y.PrivateFunc();y.PublicFunc();B、x.PrivateFunc();x.PublicFunc();y.PublicFunc();C、x.PrivateFunc();y.PrivateFunc();y.PublicFunc();D、x.PublicFunc();y.PublicFunc();【标准答案】B
49.C++程序下列说法正确的有:A、对调用的虚函数和模板类都进行迟后编译.B、基类与子类中函数如果要构成虚函数,除了要求在基类中用virtual声名,而且必须名字相同且参数类型相同返回类型相同。
C、重载的类成员函数都必须要:或者返回类型不同,或者参数数目不同,或者参数序列的类型不同.D、静态成员函数和内联函数不能是虚函数,友员函数和构造函数也不能是虚函数,但是析构函数可以是虚函数.【标准答案】A
50.在C++中有没有纯虚构造函数?【答案】构造函数不能是虚的。
只能有虚的析构函数。
51.下面的throw表达式哪些是错误的?(a)classexceptionType{};throwexceptionType{};(b)enummathErr{overflow,underflow,zeroDivide};throwzeroDivide();【答案】(a)classexceptionType{};throwexceptionType();(b)enummathErr{overflow,underflow,zeroDivide};throwzeroDivide;
52.谈谈你是怎么认识c++中的模板的?【答案】模板使程序员能够快速建立具有类型安全的类库集合和函数集合,它的实现,方便了大规模的软件开发。
53.在c++的一个类中声明一个static成员变量有没有用?【答案】在C++类的成员变量被声明为static(称为静态成员变量),意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,也就是说不管创建多少对象,static修饰的变量只占有一块内存。
其修改值为该类的其它所有实例所见;而类的静态成员函数也只能访问静态成员(变量或函数)。
static是加了访问控制的全局变量,不被继承。
54.C++中为什么用模板类。
【答案】(1)可用来创建动态增长和减小的数据结构(2)它是类型无关的,因此具有很高的可复用性。
(3)它在编译时而不是运行时检查数据类型,保证了类型安全(4)它是平台无关的,可移植性(5)可用于基本数据类型
55.函数模板与类模板有什么区别?【答案】函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。
56.请你谈谈你在类中如何使用const的。
【答案】有时我们希望某些常量只在类中有效。
由于#define定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用const修饰数据成员来实现。
const数据成员的确是存在的,但其含义却不是我们所期望的。
const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的,因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。
不能在类声明中初始化const数据成员。
const数据成员的初始化只能在类构造函数的初始化表中进行。
57.函数重载,我们靠什么来区分调用的那个函数?靠返回值判断可以不可以?【答案】如果同名函数的参数不同(包括类型、顺序不同),那么容易区别出它们是不同的。
如果同名函数仅仅是返回值类型不同,有时可以区分,有时却不能。
例如:voidFunction(void);intFunction(void);上述两个函数,第一个没有返回值,第二个的返回值是int类型。
如果这样调用函数:intx=Function();则可以判断出Function是第二个函数。
问题是在C++/C程序中,我们可以忽略函数的返回值。
在这种情况下,编译器和程序员都不知道哪个Function函数被调用。
所以只能靠参数而不能靠返回值类型的不同来区分重载函数。
58、所有的运算符都能重载吗?【答案】不能被重载的运算符在C++运算符集合中,有一些运算符是不允许被重载的。
这种限制是出于安全方面的考虑,可防止错误和混乱。
(1)不能改变C++内部数据类型(如int,float等)的运算符。
(2)不能重载‘.’,因为‘.’在类中对任何成员都有意义,已经成为标准用法。
(3)不能重载目前C++运算符集合中没有的符号,如#,@,$等。
原因有两点,一是难以理解,二是难以确定优先级。
(4)对已经存在的运算符进行重载时,不能改变优先级规则,否则将引起混乱。
59.基类的析构函数不是虚函数,会带来什么问题?【答案】派生类的析构函数用不上,会造成资源的泄漏。
60.main函数执行以前,还会执行什么代码?【答案】全局对象的构造函数会在main函数之前执行。
四、程序阅读题(62-89)
62.Therearetwointvariables:aandb,don’tuse“if”,“?:”,“switch”orotherjudgementstatements,findoutthebiggestoneofthetwonumbers.【答案】((a+b)+abs(a-b))/2
63.如何打印出当前源文件的文件名以及源文件的当前行号?【答案】cout<<__file__ voidmain intnarrlength for cout i int returnx>y?x:y;
}
intx=55,y=77;
max(x,y)+=12+11;//此时y=100;
cout<
usingnamespacestd;
classhuman{
public:
~human(){
//析构函数,该类对象在生存期结束的时候会自动调用的一个函数
cout<Disp();//指向成员运算符,得到一个指针指向的元素
deletep;
system("pause");
return0;
}
【答案】humandisp…humanover…
71.下面的函数实现在一个固定的数上加上一个数,有什么错误,改正:intadd_n(intn){staticinti=100;i+=n;returni;}【答案】因为static使得i的值会保留上次的值。
以后的i会一直更新,使得第二次调用出现错误,去掉static就可了
72.写出打印结果unsignedshortarray[]={1,2,3,4,5,6,7};inti=3;*(array+i)=【答案】4
73.写一个函数计算当参数为n(n很大)时的值1-2+3-4+5-6+7…+n。
【答案】
longfn(longn)
{
if(n<=0)
{
printf("error:nmust>0);
exit(1);
}
if(0==n%2)
return(n/2)*(-1);
else
return(n/2)*(-1)+n;
}
74.字符指针、浮点数指针、以及函数指针这三种类型的变量哪个占用的内存最大?为什么?【答案】指针变量也占用内存单元,而且所有指针变量占用内存单元的数量都是相同的。
就是说,不管是指向何种对象的指针变量,它们占用内存的字节数都是一样的,并且要足够把程序中所能用到的最大地址表示出来(通常是一个机器字长)。
75.以下三条输出语句分别输出什么?charstr1[]=“abc”;charstr2[]=“abc”;constcharstr3[]=“abc”;constcharstr4[]=“abc”;constchar*str5=“abc”;constchar*str6=“abc”;cout<
78.以下代码中的输出语句输出0吗,为什么?
structCLS
{
intm_i;
CLS(inti):m_i(i){}
CLS()
{
CLS(0);
}
};
CLSobj;
cout<
elements=newType[maxSize]; //创建队列空间
assert(elements!=0); //断言:动态存储分配成功与否
}
template
(2)求n个整数的和。
(3)求n个整数的平均值。
【答案】
#include
例如,若串s为“aabbabcbaabaaacbab”,串t为“bab”,串v为“abdc”,则执行replace操作后,串s中的结果为“aababdccbaabaaacabdc”。
试利用字符串的基本运算实现这个替换操作。
【答案】
String&String::Replace(String&t,String&v)
{
if((intid=Find(t))==-1) //没有找到,当前字符串不改,返回
{
cout<1;i--) /*逐个出局,执行n-1次*/
{
if(i==k)
i=0;
i=(i+m-1)%k; /*寻找出局位置*/
if(i!=k-1)
{
tmp=A[i]; /*出局者交换到第k-1位置*/
for(j=i;j
答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。
2. 什么是类?
答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。
3. 对象都具有的二方面特征是什么?分别是什么含义?
答:对象都具有的特征是:静态特征和动态特征。
静态特征是指能描述对象的一些属性,动态特征是指对象表现出来的行为
4. 在头文件中进行类的声明,在对应的实现文件中进行类的定义有什么意义?
#include
比如at(3,4)是矩阵的第3行第4列的元素,而非行标为3列标为4的元素,在下面的示范数据中at(3,4)的结果为12。
sum():计算矩
C++笔试题汇总(含答案与分析)
11-22
这是本人亲自总结的C++笔试题汇总,参考了网络很多C++笔试题(包括各大IT公司,游戏公司),挑选出了一些经典的题和难题做解析。
作用:对工作面试笔试和C++水平提高很有用处
内容:C++,STL等;
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022CSDN
皮肤主题:深蓝海洋
设计师:CSDN官方博客
返回首页
PennLi
CSDN认证博客专家
CSDN认证企业博客
码龄3年
暂无认证
50
原创
6万+
周排名
41万+
总排名
43万+
访问
等级
2041
积分
148
粉丝
202
获赞
31
评论
1618
收藏
私信
关注
热门文章
什么是CICD
273416
100条经典C++笔试题目及答案分享
40498
TypeError:strptime()argument1mustbestr,notbytes解决办法
14752
PsExec用法及远程操控执行脚本举例
14518
Python之向量相加中使用到list元素求和、合并
13510
分类专栏
Android
4篇
C/C++
2篇
opencv
3篇
DL
2篇
Pytorch
1篇
TensorFlow
1篇
Linux
12篇
SharePoint
8篇
C#
2篇
测试
6篇
python
11篇
系统运维
6篇
最新评论
100条经典C++笔试题目及答案分享
sinat_27762903:
operator,翻译问题,可以翻译成操作符或运算符,new是关键字也是操作符。
个人理解。
什么是CICD
拥有人鱼线的娃娃鱼:
TypeError:strptime()argument1mustbestr,notbytes解决办法
Joe_Hall_Lee:
AttributeError:module'datetime'hasnoattribute'strptime'
Linux命令ls-l详细信息说明
我名异侠:
字段1–文件许可权:接下来的9个字符指定文件许可权。
每三个字符分别依次指定用户(root),组和其他用户的读取,写入,执行权限。
以上面的示例为例,-rw-rw-r–分别表示对user(root)的读写权限,对组的读取权限以及对其他用户的权限。
如果所有三个权限都授予用户(root),组和其他用户,则格式类似于-rwxrwxrwx
字段2–链接数:第二个字段指定该文件的链接数。
在此示例中,1表示仅指向该文件的一个链接。
字段3–所有者:第三个字段指定文件的所有者。
在此示例中,该文件由用户名“maverick”拥有。
字段4–组:第四字段指定文件的组。
在此示例中,该文件属于“特立独行”组。
字段5–大小:第五个字段指定文件大小(以字节为单位)。
在此示例中,“1176”指示文件大小(以字节为单位)。
字段6–上次修改的日期和时间:第六个字段指定文件上次修改的日期和时间。
在此示例中,“Feb1600:19”指定文件的最后修改时间。
字段7–文件名:最后一个字段是文件名。
在本示例中,文件名是1.c。
如何使用opencv给视频添加水印并保存
byzaaa:
求问怎么将图片放在视频中央呢
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
adb官方最新下载链接和常用操作
Qt常用快捷键
OpenCV故障汇总(持续更新)
2022年1篇
2020年9篇
2019年48篇
目录
目录
分类专栏
Android
4篇
C/C++
2篇
opencv
3篇
DL
2篇
Pytorch
1篇
TensorFlow
1篇
Linux
12篇
SharePoint
8篇
C#
2篇
测试
6篇
python
11篇
系统运维
6篇
目录
打赏作者
PennLi
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:--)
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值
延伸文章資訊
- 1面試C/C++ 觀念整理
這裡有些題目是來自網路上MTK面試的C考古題,另外又加入了一些易搞混的觀念,幫自己統整一下,也希望能幫助在求職的讀者,面試的過程真的心很累啊!
- 2面試必備| 常見C++筆試面試題整理 - sa123
編譯階段,g++會呼叫gcc,對於c++程式碼,兩者是等價的,但是因為gcc命令不能自動和C++程式使用的庫聯接,所以通常用g++來完成連結。
- 3C/C++ 筆試、面試題目大彙總 - 日日新聞
C/C++ 筆試、面試題目大彙總. ... 原因在於foo( )和"hello world"串都會產生一個臨時物件,而在C++中,這些臨時物件都是const型別的。因此上面的表示式就是試圖將 ...
- 4c++ 筆試試題參考.pdf
成功高中101 學年高一上程式語言C++ 期末考筆試試卷班級座號: 選擇題共四十題(每題2.5 分答對給分,答錯不倒扣). #include<iostream> using namespace ...
- 5C/C++ - 常見C 語言觀念題目總整理(適合考試和面試)
常見的C/C++ 問題總整理,增強C 語言觀念並練習一些題目,努力脫離考試苦海吧! (非從零開始,適合稍有C/C++ 基礎的人閱讀。 ... 等題目(筆試考題)