毫无疑问,c语言和c++是两种不同的语言,但是又有着千丝万缕的联系。语法上c语言与c++一脉相承,但是实际用起来效果或者程序结构又完全不一样,这让我们产生了不小的疑惑,c和c++到底是什么关系呢?我们应该怎样去学习这两种语言?

目录

一、c语言和c++一脉相承

二、c++面向对象的优势

三、一些建议

一、c语言和c++一脉相承

首先我们要明确,c语言和c++是有血缘关系的。这个我们可以追溯到早期,在早期c++是没有自己的编译器的,c++要通过编译器编译成c语言代码,再由c语言编译器编译成机器代码,随着后来越来越重视面向对象的语言的发展,c++也就拥有了自己的一套编译体系。虽然在现在我们尽量把这两种语言区别开,但是好像编译器并不给面子,windows下的微软编译器(cl.exe),Linux下的G++编译器,mac下的Clang编译器都同时支持c和c++编译,统称为C/C++编译器。编译上的区别我们平时不容易察觉到,但是在实际程序编写时,我们会发现这两种语言的基本语法完全一样,c++完全可以使用c语言的数据类型,没错,使用c语言的方式去写c++完全没问题,但是我们不能完全这样做,具体原因我将在下文介绍。

其次我们要知道,c++是作为c语言的一个拓展存在的。在科技不断发展的今天,c语言已经不能够完全满足众多项目的编程需要,所以科学家为了满足生产力的需要,c++就应运而生了。我们在说这两种语言的区别的时候,总会笼统的说一句c语言面向过程,c++面向对象,这是没有错的。面向过程的意思就是要求我们去用基本的库去写一些功能来完成我们的项目,面向对象的意思是我们去利用前辈留给我们的财产(指各种各样的库),去完成程序的设计。其实面向对象不仅仅是指我们会有丰富的库,这些库是基于编程语言的优势完成设计的,那么这样的话,我们作为使用库的程序员,同样可以利用语言的优势去写库留给有需要的人去用,我觉得这才是面向对象语言的核心。就c++来说,由于语言的本身的关系,不足以支持我们去写一些比较高级的通用库去完成功能。关于c++是怎么利用自身优势来完成库的编写,我将在下文介绍。

二、c++面向对象的优势

上文我们留了两个坑:我们怎样利用c++的优势去完成代码的编写和我们为什么不能完全按照c语言的方式去写c++代码。How and Why?

我们首先来说c++的优势是什么

c++拥有封装继承多态三大特性。

1、封装。封装指的是我们可以在类中将我们不希望外界调用的函数或者成员变量设置成私有(private)或者保护(protected)成员的形式,而外界需要调用的设置成公共成员(public)的形式,这样不仅保护了我们的函数不被改变,并且也告诉后来者不必去动我的私有和保护成员的函数和变量。

2、继承。继承指的是一个类被定义了之后,可以去由其他有需要的类去继承父类的成员公共或者受保护成员的变量和函数,这样使得我们很多函数和变量不必去重复定义,减少代码量。

3、多态。多态指的是定义在父类内的虚函数,可以被子类重新定义,这个过程我们称之为“重写”,这样做的好处是我们可以不必多次在每个文件中去定义逻辑相同的函数,大大提高了函数的重用。

此外,c++还拥有独特的命名空间这一概念。这个在解决变量命名重复方面起着很大的作用。

说完这三大特性,我想上面两个问题也就解决了。由于c++拥有相对于c语言来说的三大特性提供能量,程序必然比啥都没有的c语言简洁许多。c++可以对c语言说:你有的我有,你没有的我还有,气不气!

三、一些建议

此处是我在学习c语言和c++初期感到疑惑的一些问题,我把他分享给大家。

1、在学习c++之前我有必要学习c语言吗?

一口吃不出个胖子,任何事情都要循序渐进。在我来看,确实是有必要的,至少基本语法是要了解的。在学完c语言再去看c++的书你会发现,有大概半本的内容是你在学习c语言的时候学到的,这样学起来相当轻松。

2、我有c语言基础,那我该怎么学习c++呢?

在学习c++初期,大部分人犯了同一种错误,就是真的把c++当作c语言来学,学来学去学到最后用c++写出来的代码还是和c语言一样的结构。显然这样学是不对的。学习c++我觉得切入点一定是从类切入,这样你学一段时间就会发现,c++和c语言完全不同。类可以说是c++的精髓,不妨在学习的时候贯穿始终。

3、我真的有必要学习c++吗?

若是有时间我建议学一学,毕竟技多不压身,但是前提是不要丢了自己很了解的语言,因为那可能是你主要的阵地,这个顶多算加分项。你想想,自己写的单片机串口程序,上传到自己写的上位机,看着自己检测到的数据编程一幅幅美妙的图形,这是一个多么幸福的时刻。这段话不仅限送给纠结于学不学c++,其他的语言也一样。

由c语言转到c++,我们需要做什么?相关推荐

  1. C语言填空题10道,3道C语言填空题,谁帮忙做下,谢谢

    3道C语言填空题,谁帮忙做下,谢谢0 功能:输出两个整数中大的那个数,两个整数由键盘输入. #include #include int main() { int a,b,*p1,*p2; p1=(in ...

  2. 自学python能学成吗-没有任何编程基础可以直接学习python语言吗?学会后能够做什么?...

    很明确的说 python非常适合没有任何编程基础的人入门.. 目前应用最多的:全栈开发.数据分析.运维开发,今天我们就以这三个重点的岗位来做一下自学Python的规划,希望你在学之前就能有结果的来走得 ...

  3. C语言二级背诵小抄,计算机二级C语言上题库(可缩印做小抄)百分百准确.doc

    计算机二级C语言上题库(可缩印做小抄)百分百准确 第一套 程序填空 程序通过定义学生结构体数组,存储了若干个学生的学号.姓名和三门课的成绩.函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典 ...

  4. C语言pi等于前一百项相乘,2011年9月份计算二级C语言上机题库(可缩印做小抄)百分百准确.doc...

    2011年9月份计算二级C语言上机题库(可缩印做小抄)百分百准确 第一套 程序填空 程序通过定义学生结构体数组,存储了若干个学生的学号.姓名和三门课的成绩.函数fun的功能是将存放学生数据的结构体数组 ...

  5. python255多少钱_CS255留学生作业代做、代写Python语言作业、Timetabling作业代做、Python编程设计作业调试...

    CS255留学生作业代做.代写Python语言作业.Timetabling作业代做.Python编程设计作业调试 日期:2019-11-11 11:08 CS255 Artificial Intell ...

  6. GO语言初识(为go开发android做准备)

    大概14年的时候go语言的开发者就提过android平台会引入go开发,GO语言的1.5版本也发布了go mobile.现在够发布到1.8预览版了,该学学go了,不然被落下太多了. 老规矩,先来个he ...

  7. 你所了解的python岗位有哪些_Python是最火语言之一,那么他适合做哪些岗位?Python最全岗位!...

    Python的排名从去年开始就借助人工智能持续上升,现在它已经成为了第一名.Python的火热,也带动了工程师们的就业热.据统计,现在初级python工程师的起薪一般在10-20K. 现在来为大家解读 ...

  8. 如何写一个能被手机打开的C语言小程序,如何用C语言中一些简单的语句做一个小程序,能够输入一个字符就会弹出一句话...

    满意答案 lyj1260 2015.03.28 采纳率:43%    等级:11 已帮助:6408人 这个不难,是最基本的C语言程序了,我写个示例给你 #include //包含头 int main( ...

  9. 我的Go语言学习之旅六:做一个WIN的简单弹窗

    做为一个WIN的爱好者,不得不说,通常情况下在学习一门新语言之后我会很急于制作一个弹窗来测试一下这个语言在WIN的窗体效果,这里不多说,先上代码. package mainimport ( " ...

  10. C语言oj中a b怎么做,【HDUOJ】第1002题 A + B Problem II 纯C语言解法

    [HUDOJ-1002] 1.原题: Problem Description I have a very simple problem for you. Given two integers A an ...

最新文章

  1. windows 内存泄露和资源泄漏调试
  2. 创立创造创建的区别_【干货|知识分享】Solidworks与Rhino有什么区别呢?
  3. 前期优达无人驾驶对课程评价
  4. npm install 报错:ERR! code EINTEGRITY 解决方案
  5. Cannot resolve corresponding JNI function
  6. HTTP与HTTPS的安全性讨论
  7. 企业职工能实行弹性退休吗?
  8. android 电池续航时间,《Android优化专题》——优化电池续航能力
  9. 阶段3 1.Mybatis_11.Mybatis的缓存_6 Mybatis中的一级缓存
  10. SpringBoot酒店管理系统 hotel.liuyanzhao.com
  11. Entity Framework 实现in查询
  12. 最新win7/win10/XP系统下载_「装机系统」_百度云
  13. Android 蓝牙4.0 BLE 获取链接设备Rssi值
  14. 使用gdal的ogr创建shapefile文件(c++)
  15. Linux快捷键大全
  16. 重磅!我组问卷调查结果公布
  17. vue + gifshot 实现GIF动图
  18. php把北京时间转换时间戳,北京时间与unix时间戳(unix timestamp)的互转方法
  19. linux查看其他用户history,从Linux服务器上的其他用户隐藏命令历史记...
  20. 格式: echo -e \033[字背景颜色;字体颜色m字符串\033[0m

热门文章

  1. 旧电脑装什么系统最快_旧电脑的福音:Win10精简版,运行比Win7更快,安装包不到3GB...
  2. 凡人重果,菩薩重因。
  3. 让 WordPress 缩略图机制支持URL外链图片
  4. Swagger2介绍及使用
  5. 宽容还是忍让,软弱还是大度
  6. (转贴)佛祖说出的爱情箴言
  7. JAVA编程环境搭建 JDK与环境变量、Eclipse
  8. SpringBoot中使用qq邮箱发送邮件
  9. a区计算机调剂学校,A区接收调剂的一本院校及专业
  10. 简单javascript计算器