C++经典面试题(一)

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

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

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

1.C和C++中struct有什么区别?

1>
C++中的struct类似于class,有变量,有构造函数、虚函数等,有继承,多态等类的特征;

2>
C中的struct只有变量,不能有函数,但是可以有函数指针

2.C++中的struct和class有什么区别?

在C++中,两者区别不大,但是有2个主要的区别

1>.
继承权限:struct默认是public继承;class默认是private继承

2>.
访问权限:struct默认是public访问;class默认是private访问

3.如何判断一段程序是由C
编译程序还是由C++编译程序编译的?

【标准答案】

#ifdef __cplusplus

cout<<“c++";

#else

cout<<"c";

#endif

(这个以前还真没注意过,涨姿势了。。。)

4.
C和C++有什么不同?

【参考答案】

从机制上:

c是面向过程的(但c也可以编写面向对象的程序);

c++是面向对象的,提供了类。但是,c++编写面向对象的程序比c容易。

从适用的方向: c适合要求代码体积小的,效率高的场合,如嵌入式;
c++适合更上层的,复杂的; llinux核心大部分是c写的,因为它是系统软件,效率要求极高。

从名称上也可以看出,c++比c多了+,说明c++是c的超集;那为什么不叫c+而叫c++呢,是因为c++比 c来说扩充的东西太多了,所以就在c后面放上两个+;于是就成了c++。

C语言是结构化编程语言,C++是面向对象编程语言。 C++侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。

关于这个问题,个人觉得《Effective
C++》上面第一条说的很好,

View C++ as a federation of languages. 把C++当做一个语言联邦。

C++由四部分组成

1> C语言部分;

2> 面向对象部分,包括封装、继承、多态这些C语言所没有的特性;

3> 泛型编程部分,大多数类、函数要考虑到把它设计成模板,方便复用;

4> STL库,里面封装了大量的优秀模板,是 3> 中内容的集成, 学会使用它们可以让代码更高效。当然,最好去深入了解STL源码,那样会对C++有更深的理解。

5.“引用”与指针的区别是什么?

【参考答案】

指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。

程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。

在另一本C++著作《More Effective C++》里,第一条就是论述 point 和 reference的区别

总结一下 ,

1> 指针是一个存储地址的变量,而引用是一个变量的别名。所以在一个函数中,传引用要比传指针速度更快。

2> 指针可以指向一个空值,而引用必须初始化。指针可以如下形式出现

int *p;

是合法但不合理的(相当于是一个野指针)。

可以声明一个指向空值的指针

int *p=null

而引用不行

int &r;

是错误的

引用必须初始化为一个变量的别名,如

int a=5;
int &r=a;

3> 也是因为 2>的特性,指针在使用前要判断是否为空,而引用必定不为空(否则会报错),所以不用判断。

4> 指针可以更改指向的内存地址,而引用是和变量绑定的,不可更改。

5> 在运算符重载过程中,通常返回一个引用往往比返回一个指针更好,使用指针易引起语义上的歧义。

6.

class A

{

virtual void func1();

void func2();

} ;

class B: class A

{

void func1()

{

cout < < "fun1 in class B" < < endl;

}

virtual void func2()

{

cout < < "fun2 in class B" < < endl;

}

A, A中的func1和B中的func2都是虚函数

B, A中的func1和B中的func2都不是虚函数.

C, A中的func2是虚函数.,B中的func1不是虚函数.

D, A中的func2不是虚函数,B中的func1是虚函数.

【标准答案】A

水题。。

7.int id[sizeof(unsigned long)];这个对吗?为什么?

【标准答案】

正确

这个 sizeof是编译时运算符,编译时就确定了 可以看成和机器有关的常量。

8.某文件中定义的静态全局变量(或称静态外部变量)其作用域是 ()?

A.只限某个函数 B.本文件
   C.跨文件 D.不限制作用域

【参考答案】B。静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

在《C和指针》上看过,static关键字会改变具有外部链接性的变量和函数

9.C++函数中值的传递方式有哪几种?

【标准答案】

C++函数的三种传递方式为:值传递、指针传递和引用传递。

(指针传递就是通常说的地址传递)

10.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?

【标准答案】c用宏定义,c++用inline

define实现的函数功能容易出bug,所以在c++中最好不要使用

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

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

时间: 2024-10-17 21:33:03

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

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

嵌入式软件工程师经典笔试题 > 预处理器(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--,用数值形式表示该权限,则该八

李洪强iOS经典面试题总结

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

【转】.net 经典面试题

[转].net 经典面试题 1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该类内部和继承类中可以访问. public : 公共成员,完全公开,没有访问限制. internal: 在同一命名空间内可以访问. 2 .列举ASP.NET 页面之间传递值的几种方式. 答. 1.使用QueryString, 如....?id=1; response.

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

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

经典面试题回答——学习Java基础的目的

本系列知识解释:相信每一个学习Java的人都是从JavaSE开始的,也就是Java基础开始.但是却并不清楚学习Java基础到底有什么用? 首先我来回答这个问题,学习Java基础是有两个目的: 一.掌握基本的Java语言底层编码方法,同时掌握Java这门语言的编程思想,为了后期学习JavaEE打下基础,要不然在学习JavaEE的时候,连封装,继承,多态都不懂,那就实在是没法说了(相信在传智播客学习过Java基础的同学,这些都不是问题.) 二.在学习完JavaSE和JavaEE后招工作的时候能够答上

李洪强iOS经典面试题

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px "Helvetica Neue"; color: #333333; min-height: 20.0px } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px "Helvetica Neue"; color: #333333; background-color: #ffffff } p.p3 { margi

李洪强IOS开发之-iOS经典面试题

李洪强IOS开发之-iOS经典面试题 写这篇文章的目的是因为前两天同学想应聘iOS开发,从网上找了iOS面试题和答案让我帮忙看看.我扫了一眼,倒吸了一口冷气,仔细一看,气的发抖.整篇题目30多个没有一个答案是对的,总结这篇面试题的作者对iOS机制根本就是一知半解就敢发到网上,不管有心还是无心都是坑害新人.所以在这里总结一下这几年面试别人和被别人面试遇到的一些我认为比较好的基础题目分享给大家,进阶题目在后续补充.我的理解如果有错漏请一定指出,非常感谢! 从12年开始做面试官到现在已经三个年头了,这

Linux三剑客企业级经典面试题解答实战

Linux三剑客企业级经典面试题解答实战 说明:来自早晨老男孩教育在线班一期同学的面试题和学生给出的答案整理 面试题:请过滤oldboy.log中在device: {}里面出现了多少次oldboy,过滤并统计出来. oldboy is a linuxer. device: { oo oldboy no sql this is log niu niu } oldboy device: { oldboy no sql this is log niu niu } oldboy device: { ol

iOS经典面试题总结--内存管理

iOS经典面试题总结--内存管理 内存管理 1.什么是ARC? ARC是automatic reference counting自动引用计数,在程序编译时自动加入retain/release.在对象被创建时retain count+1,在对象被release时count-1,当count=0时,销毁对象.程序中加入autoreleasepool对象会由系统自动加上autorelease方法,如果该对象引用计数为0,则销毁.那么ARC是为了解决MRC手动管理内存存在的一些而诞生的. MRC下内存管