C++经典面试题(四)

最近看一些面试题,觉得如果自己被问到了,并不能很利落的回答出来。

一是从来没有这个意识,二是没有认真的梳理下。

下面对这些题做出分析,哈!个人能力有限,其中难免有疏漏,欢迎大家补充咯!

31.Heap与stack的差别

【参考答案】

Heap是堆,stack是栈。

Stack的空间由操作系统自动分配/释放,Heap上的空间手动分配/释放。

Stack空间有限,Heap是很大的自由存储区

C中的malloc函数分配的内存空间即在堆上,C++中对应的是new操作符。

程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行

32.In C++, what does "explicit" mean? what does "protected" mean?

【标准答案】

c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,在某些情况下,我们要求类的使用者必须显示调用类的构造函数时就需要使用explicit,反之默认类型转换可能会造成无法预期的问题。

protected控制的是一个函数对一个类的成员(包括成员变量及成员方法)的访问权限。protected成员只有该类的成员函数及其派生类的成员函数可以访问。

我擦!它俩为啥放在一起问。

33.重复多次fclose一个打开过一次的FILE *fp指针会有什么结果,并请解释。

【参考答案】考察点:导致文件描述符结构中指针指向的内存被重复释放,进而导致一些不可预期的异常。

34.为什么数组名作为参数,会改变数组的内容,而其它类型如int却不会改变变量的值?

【参考答案】当数组名作为参数时,传递的实际上是地址。而其他类型如int作为参数时,由于函数参数值实质上是实参的一份拷贝,被调函数内部对形参的改变并不影响实参的值。

传值与传地址的区别

35.你觉得如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?

【参考答案】

(1)  程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示什么。

(2)  在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。

(3)  如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错。

36.为什么需要使用堆,使用堆空间的原因?

【参考答案】直到运行时才知道一个对象需要多少内存空间;不知道对象的生存期到底有多长。

因为需要动态分配内存啊。。。

37. const关键字?有哪些作用

【参考答案】const关键字至少有下列n个作用:

(1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了;

(2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;

(3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;

(这样既可以利用传地址、传引用的高效特性,又保证了传值的安全性)

(4)对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;

还记得如果要修改成员变量,应该把成员变量声明为什么吗?mutable!

(5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。

更多更详细的内容,推荐看《Effective C++》

38.、是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态?

【参考答案】virtual修饰符会被隐形继承的。virtual可加可不加。子类的空间里有父类的所有变量(static除外)。同一个函数只存在一个实体(inline除外)。子类覆盖它的函数不加virtual ,也能实现多态。在子类的空间里,有父类的私有变量。私有变量不能直接访问。

不过最好是加上,加上表明它是一个虚函数,这样提高了代码的阅读性。

39.面向对象的三个基本特征,并简单叙述之?

【参考答案】

1. 封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private,protected,public)

2. 继承:广义的继承有三种实现形式:

实现继承(指使用基类的属性和方法而无需额外编码的能力)、

可视继承(子窗体使用父窗体的外观和实现代码)、

接口继承(仅使用属性和方法,实现滞后到子类实现)。

前两种(类继承)和后一种(对象组合=>接口继承以及纯虚函数)构成了功能复用的两种方式。                                 3. 多态:是将父对象设置成为和一个或更多的与他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

40.重载(overload)、重写(override,有的书也叫做“覆盖”)、重定义(redefinition)的区别?

【标准答案】

未完。。。待续(*^_v_^*)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-09 21:53:52

C++经典面试题(四)的相关文章

C++经典面试题(六)

最近看一些面试题,觉得如果自己被问到了,并不能很利落的回答出来. 一是从来没有这个意识,二是没有认真的梳理下. 下面对这些题做出分析,哈!个人能力有限,其中难免有疏漏,欢迎大家补充咯! 51.在C++中有没有纯虚构造函数? [标准答案]构造函数不能是虚的.只能有虚的析构函数. 补充一句,有 纯虚的 析构函数 52.下面的 throw表达式哪些是错误的? (a) class exceptionType { }; throw exceptionType { }; (b) enum mathErr {

【转】嵌入式软件工程师经典笔试题

嵌入式软件工程师经典笔试题 > 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中 有多少秒而不是计算出实际的值,是更清晰而没有代价的. 3).

Linux 经典面试题

[Linux  经典面试题] 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文件用 i节点 来标识. 4. 全部磁盘块由四个部分组成,分别为引导块 .专用块 . i节点表块 和数据存储块. 5. 链接分为: 硬链接 和 符号链接 . 6. 超级块包含了i节点表 和 空闲块表 等重要的文件系统信息. 7. 某文件的权限为:d-rw-_r--_r--,用数值形式表示该权限,则该八

50个C/C++经典面试题

C/C++经典面试题  面试题1:变量的声明和定义有什么区别 为变量分配地址和存储空间的称为定义,不分配地址的称为声明.一个变量可以在多个地方声明, 但是只在一个地方定义.加入extern 修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分 定义. 说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间, 如外部变量. 面试题2 :写出bool .int. float .指针变量与 “零值”比较的if 语句 bool 型数据: if( flag ) { A;

转:嵌入式软件工程师经典笔试题

> 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)  #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的. 3). 意识到这个表达式将使一个1

mysql经典面试题

mysql 经典面试题 (2011-10-26 17:13:38) 转载▼ 标签: 杂谈 分类: 日志 1.用两种方式根据部门号从高到低,工资从低到高列出每个员工的信息. employee: eid,ename,salary,deptid; select * from employee order by deptid desc,salary 2.列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序 创建表: mysql> create table employee921(id

.Net经典面试题

1.同一平台: 2.Bootstrap 3.webAPI 4.SignalR 5.ASP.Identity 6.OWIN 二. ObjectContext: 用于控制ASP的交易(Transaction),交易由Microsoft Transaction Server(MTS)管理 三.asp 是解释执行 asp.net是编译执行的 四.列举ASP.NET 页面之间传递值的几种方式. 答. 1.使用QueryString,  如....?id=1; response. Redirect()...

【笔试/面试】SQL 经典面试题

基本概念 (1)any/all,构成 where 子句的条件判断,any:表示或(or)的概念,all:则表示与(and)的概念,这两个关键字的出现是为了语句的简化: (2)先分组再做聚合,逻辑上也应当如此,聚合(取最值)之后便无分组的必要: select region, sum(population), sum(area) from bbc group by region; 1 (3)group by having,having 对分组后的数据进行筛选,这是 where 所做不到的: 1. 不

李洪强iOS经典面试题总结

iOS经典面试题总结--内存管理 我根据自己的情况做了一下总结,答案是我总结的,如有答的不好的地方,希望批评指正以及交流,谢谢! 内存管理 1.什么是ARC? ARC是automatic reference counting自动引用计数,在程序编译时自动加入retain/release.在对象被创建时retain count+1,在对象被release时count-1,当count=0时,销毁对象.程序中加入autoreleasepool对象会由系统自动加上autorelease方法,如果该对象