C/C++面试题:C++与C有什么不同?
昨天,小编在一个讨论群里看到这样的对话
有人想要入学校编程俱乐部,面试时,学长问了她C++的区别,她没有答上来,就没有通过。
说到C和C++的区别,不只是进入学校社团有考核,出了学校,找工作面试时,也会遇到这样的问题,那么该如何回答呢?他们之间有什么区别呢?今天小编就和大家来分享一下~
考点:C和C++的联系与区别
出现频率:★★★★
解析:
C是一个结构化语言,它的重点在于算法和数据结构。对语言本身而言,C是C++的子集。
C程序的设计首要考虑的是如何通过一个过程,对输入进行运算处理得到输出。
对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够配合对应的问题,这样就可以通过获取对象的状态信息得到输出或实现过程控制。
因此C与C++的最大区别在于它们的用于解决问题的思想方法不一样。
C实现了C++中过程化控制及其它相关功能。而在C++中的C,相对于原来的C还有所加强,引入了重载、内联函数、异常处理等等,C++更是拓展了面向对象设计的内容,如类、继承、虚函数、模板和包容器类等等。
在C++中,不仅需要考虑数据封装,还需要考虑对象粒度的选择、对象接口的设计和继承、组合与继承的使用等等问题。
相对于C,C++包含了更丰富的设计的概念。
从C到C++
来源:C语言技术网(www.freecplus.net)
作者:码农有道
C++读作“C加加”,是“C Plus Plus”的简称,C++是在C语言的基础上增加新特性,从语法上看,C语言是C++ 的一部分,C语言代码几乎不用修改就能够以 C++ 的方式编译。
对于C和C++的关系,有很多种说法,从表面上看,很容易认为C++是C的升级版,C++比C高大上,C过时了,有这种想法说明他不了解C/C++语言,我们先来看看世界编程语言排行榜,下表是2019的数据(过去十年的数据也大致如此)。
从上表中看出,这个世界上的C程序员比C++程序员多很多。
这么多年了,我也搞不清楚自己是C程序员,还是C++程序员,好像没什么差别。
C++有很多新的特征,这些新特征并不一定实用,甚至很烦人。但是,C++的开发效率确实比C要高,所以我仍然采用断章取义的方式来介绍C++的知识。不管是C还是C++,实用就好。
一、C++程序的命名规则
C++头文件一般采用.h后缀,也用有.hpp的。
C++程序文件一般采用.cpp后缀,也有用.cc的,建议采用.cpp,C++对程序文件的命名没有强制要求,采用.cpp为后缀是大部分程序员的习惯。
二、C++程序的编译
在某些操作系统中,C和C++是同一个编译器,在CentOS中,C的编译器是gcc,C++的编译器是g++。
1、安装g++编译器
用root用户登录服务器,执行以下命令安装或升级gcc-c++编译器。
yum -y install gcc-c++
如果您的CentOS系统没有安装gcc-c++,以上命令就会安装最新版本的gcc-c++,如果已经安装了gcc-c++,就会更新到最新版本的gcc-c++,所以,以上命令不管执行多少次都没有问题。
安装gcc-c++的前提条件是服务器必须可以访问互联网。
2、编译C++程序
编译C程序的命令是gcc,编译C++程序的命令是g++,g++命令和gcc命令的用法相同,把gcc改为g++就可以了,我们在学习C语言时编写的那些示例程序,基本上都可以用g++来编译。
三、C++是面向对象语言
C语言是面向过程的编程语言,C++是面向对象的编程语言,很多人认为面向对象会比面向过程的方法更先进。仁者和智者的说法各有不同,大家慢慢体会,不能人云亦云。
C++的对象,确实可以大幅的提升了C程序员的开发效率,降低程序员犯错的机会。
四、C++输入和输出
在C语言中,我们使用scanf和printf来对数据进行输入输出操作。在C++语言中,增加了cin和cout输入输出,但是我从来不用它,因为它不实用,对格式化的支持实在是太麻烦。
printf实在太完美,太强大。
五、C++异常
C++增加了异常机制,但是,它从诞生开始就一直有争议。
我没有发现C++的异常有什么实用价值,也从来没有用过它。
六、C++命名空间和模板
了解一下命名空间和模板的概念和用法是可以的,会使用就行,但我不建议自定义命名空间和模板,没必要把程序搞得那么麻烦。
七、C++布尔类型(bool)
C语言并没有彻底从语法上支持“真”和“假”,只是用 0 和非 0来代表。这点在 C++中得到了改善,C++
新增了 bool 类型(布尔类型),它占用 1 个字节长度。bool 类型只有两个取值,true和 false:true 表示“真”,false 表示“假”。
bool 是类型名字,也是 C++ 中的关键字,它的用法和 int、char、long是一样的,可以用=赋值,可以用于函数的参数和返回值。
boolflag=true;// 定义bool型变量flag,赋值为trueif(flag)printf("flag is true");elseprintf("flag is fals"); flag=false;// 把flag赋值为falseif(flag)printf("flag is true");elseprintf("flag is fals");
八、C++定义变量的位置
ANSI C规定,所有局部变量都必须定义在函数开头,在定义变量之前不能有其他的执行语句。C99标准取消这这条限制,但是某些编译器对C99的支持很不积极,仍然要求变量定义在函数开头,或者只支持一部分。
取消限制带来的另外一个好处是,可以在 for 循环的控制语句中定义变量。
inttotal=0;for(intii=1; ii<=100;ii++) { total = total + ii; }
这个很棒,程序更简洁,更自由。
九、C++函数的缺省参数
在C语言中,函数在声明的时候指定了参数列表,调用的时候函数参数的个数、顺序和数据类型必须与函数声明参数列表相同,但是在C++中,声明函数的时候,可以为函数指定缺省参数,调用时缺省参数可以不填写。例如:
intwritetofile(FILE *fp,char*strbuf,boolenbuffer=true);// 指定参数enbuffer的缺省值为true
enbuffer参数表示是否启用缓冲区,writetofile函数被调用的时候,如果只写fp和strbuf参数,不写enbuffer参数,enbuffer参数将缺省为true,例如:
writetofile(fp,strbuf);// 调用函数的时候,如果第三个参数enbuffer不填,就用缺省值true
这个不错,程序更简洁。
十、C++动态内存管理
在C语言中,动态管理内存用 malloc() 函数,释放内存用 free() 函数。
在C++中,这两个函数仍然可以使用,但是C++又新增了两个关键字,new 和 delete,new用来动态分配内存,delete 用来释放内存。
和C语言的动态内存管理一样,C++动态内存管理的应用场景不多。
如果你对编程感兴趣,想要深入学习。这里分享素材包及学习资源,还有免费教程哦(包含C语言、C++、Windows、Qt、Linux相关知识点)~不论是小白还是进阶者,在这里都能获得成长。

C/C++面试题:C++与C有什么不同?的更多相关文章
- .NET面试题系列[8] - 泛型
“可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...
- 关于面试题 Array.indexof() 方法的实现及思考
这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...
- 对Thoughtworks的有趣笔试题实践
记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...
- 从阿里巴巴笔试题看Java加载顺序
一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...
- JAVA面试题
在这里我将收录我面试过程中遇到的一些好玩的面试题目 第一个面试题:ABC问题,有三个线程,工作的内容分别是打印出"A""B""C",需要做的 ...
- C++常考面试题汇总
c++面试题 一 用简洁的语言描述 c++ 在 c 语言的基础上开发的一种面向对象编程的语言: 应用广泛: 支持多种编程范式,面向对象编程,泛型编程,和过程化编程:广泛应用于系统开发,引擎开发:支持类 ...
- .NET面试题系列[4] - C# 基础知识(2)
2 类型转换 面试出现频率:主要考察装箱和拆箱.对于有笔试题的场合也可能会考一些基本的类型转换是否合法. 重要程度:10/10 CLR最重要的特性之一就是类型安全性.在运行时,CLR总是知道一个对象是 ...
- 我们公司的ASP.NET 笔试题,你觉得难度如何
本套试题共8个题,主要考察C#面向对象基础,SQL和ASP.NET MVC基础知识. 第1-3题会使用到一个枚举类,其定义如下: public enum QuestionType { Text = , ...
- 我设计的ASP.NET笔试题,你会多少呢
本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态? ...
- 猫哥网络编程系列:详解 BAT 面试题
从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...
随机推荐
- 机器学习 第4篇:sklearn 最邻近算法概述
sklearn.neighbors 提供了针对无监督和受监督的基于邻居的学习方法的功能.监督的基于最邻近的机器学习算法是值:对带标签的数据的分类和对连续数据的预测(回归). 无监督的最近算法是许多其他 ...
- 公钥、私钥、SSL/TLS、会话密钥、DES【转载】
原文链接:https://www.cnblogs.com/thbCode/p/5829719.html 一,公钥私钥1,公钥和私钥成对出现2,公开的密钥叫公钥,只有自己知道的叫私钥3,用公钥加密的数据 ...
- HashMap的put kv,是如何扩容的?
HashMap的put kv,是如何扩容的? 描述下HashMap put(k,v)的流程? 它的扩容流程是怎么样的? HashMap put(k,v)流程 通过hash(key方法)获取到key的h ...
- layui系列学习第一天
新开一个博客系列 记录下layui学习过程及感受 今天受到很大的打击 ...希望 自己能坚持做好 到1.12号可以完成这个博客 一.基础说明 layui css 命名规范:1.layui-模块名- ...
- 鸿蒙系统应用开发之JS实现一个简单的List
在之前的文章鸿蒙应用开发之怎么更好的远程连接手表模拟器做调试里我运行了一个穿戴设备的应用,利用JS UI实现了一个最简单的HelloWorld. 今天我打算在智慧屏设备上利用豆瓣音乐的接口数据实现一个 ...
- 详解如何在RVIZ中用Marker显示机器人运动路径
写在前面 最近有道作业题需要将机器人的历史路径显示出来,但是网上很多相关的教程都是搬运了官网的链接,并没有详细的操作流程...因此我又花费了很多时间去ros官网上学习marker的用法,学习怎么写pu ...
- create event[]
一.前言自 MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录.对数据进行汇总等等),来取代原先只能由操作系 ...
- fashion数据集训练
下载数据集 fashion数据集总共有7万张28*28像素点的灰度图片和标签,涵盖十个分类:T恤.裤子.套头衫.连衣裙.外套.凉鞋.衬衫.运动鞋.包.靴子. 其中6万张用于训练,1万张用于测试. im ...
- [MIT6.006] 23. Computational Complexity 计算复杂度
这节课主要讲的计算复杂度,一般有三种表达不同程度的计算复杂度,如下图所示: P:多项式时间: EXP:指数时间: R:有限时间内. 上图还给了一些问题的计算复杂度的对应结果,关于一些细节例如NP, N ...
- [MIT6.006] 15. Single-Source Shortest Paths Problem 单一来源的最短路径问题
首先简单介绍下最大路径问题:给定一个加权图,找到两点之间最短加权路径,本质上就是求两点之间哪条路径的权重和最小.有两种算法去做:Dijkatra和Bellman-Ford,后面几节课会专门讲这两个算法 ...