昨天,小编在一个讨论群里看到这样的对话

 

 

有人想要入学校编程俱乐部,面试时,学长问了她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有什么不同?的更多相关文章

  1. .NET面试题系列[8] - 泛型

    “可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...

  2. 关于面试题 Array.indexof() 方法的实现及思考

    这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...

  3. 对Thoughtworks的有趣笔试题实践

    记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...

  4. 从阿里巴巴笔试题看Java加载顺序

    一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...

  5. JAVA面试题

    在这里我将收录我面试过程中遇到的一些好玩的面试题目 第一个面试题:ABC问题,有三个线程,工作的内容分别是打印出"A""B""C",需要做的 ...

  6. C++常考面试题汇总

    c++面试题 一 用简洁的语言描述 c++ 在 c 语言的基础上开发的一种面向对象编程的语言: 应用广泛: 支持多种编程范式,面向对象编程,泛型编程,和过程化编程:广泛应用于系统开发,引擎开发:支持类 ...

  7. .NET面试题系列[4] - C# 基础知识(2)

    2 类型转换 面试出现频率:主要考察装箱和拆箱.对于有笔试题的场合也可能会考一些基本的类型转换是否合法. 重要程度:10/10 CLR最重要的特性之一就是类型安全性.在运行时,CLR总是知道一个对象是 ...

  8. 我们公司的ASP.NET 笔试题,你觉得难度如何

    本套试题共8个题,主要考察C#面向对象基础,SQL和ASP.NET MVC基础知识. 第1-3题会使用到一个枚举类,其定义如下: public enum QuestionType { Text = , ...

  9. 我设计的ASP.NET笔试题,你会多少呢

    本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态? ...

  10. 猫哥网络编程系列:详解 BAT 面试题

    从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...

随机推荐

  1. Mysql优化建议

    Mysql优化建议: (1)CPU要更快,而不是更多.因为mysql不支持多个处理器并发处理一条sql,所以正常情况下不需要考虑更多的CPU.当然,你的系统中的对mysql的并发很高时,多核可以解决一 ...

  2. 【总结】IP

    一. IP基本认识 1.IP 在 TCP/IP 参考模型中处于第三层,也就是网络层. 网络层的主要作用是:实现主机与主机之间的通信,也叫点对点(end to end)通信 2.网络层与数据链路层有什么 ...

  3. 《Clojure编程》笔记 第3章 集合类与数据结构

    目录 背景简述 第3章 集合类与数据结构 3.1 抽象优于实现 3.1.1 Collection 3.1.2 Sequence 3.1.3 Associative 3.1.4 Indexed 3.1. ...

  4. .NET redis 客户端开源组件 FreeRedis (继 CSRedisCore 之后重写)

    什么是 FreeRedis FreeRedis 是一款 .NET redis 客户端开源组件,以 MIT 协议开源托管于 github,目前支持 .NET 5..NETCore 2.1+..NETFr ...

  5. Lte Design Documentation之RRC

    RRC 特点 RRC模型在模拟器中提供以下功能 生成(在eNB中)和解释(在UE中)信息块(尤其是MIB和SIB1, SIB2) 初始化小区选择 RRC连接建立过程 RRC重新配置程序, 支持以下方式 ...

  6. IP 层收发报文简要剖析3--ip输入报文分片重组

    在ip_local_deliver中,如果检测到是分片包,则需要将报文进行重组.其所有的分片被重新组合后才能提交到上层协议,每一个被重新组合的数据包文用ipq结构实例来表示 struct ipq { ...

  7. 查找数组中第k大的数

    问题:  查找出一给定数组中第k大的数.例如[3,2,7,1,8,9,6,5,4],第1大的数是9,第2大的数是8-- 思考:1. 直接从大到小排序,排好序后,第k大的数就是arr[k-1]. 2. ...

  8. 记录一次读取hdfs文件时出现的问题java.net.ConnectException: Connection refused

    公司的hadoop集群是之前的同事搭建的,我(小白一个)在spark shell中读取hdfs上的文件时,执行以下指令 >>> word=sc.textFile("hdfs ...

  9. UNP——第三章,套接字编程介绍

    1.套接字结构 多数套接字函数都有套接字结构参数,每个协议族都定义了自己的套接字结构,以 sockaddr_ 开始,并对应协议族的唯一后缀. struct sockaddr_in { uint8_t ...

  10. 用rsync备份一台linux服务器上的数据

    rsync是安装完linux后都会自带的,在机器上运行rsync命令看是否有安装即可 备份到远程服务器 这里介绍的rsync的用途是备份一台linux服务器上的数据到另外一台机器 环境 将需要备份机器 ...