由c语言转向c++,我们需要做什么?

点击上方蓝字添加关注

在此送大家一份小礼物,公众号内回复linux0001即可获得一本Linux电子教程

“c语言和c++到底有什么不同和联系呢?”

毫无疑问,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++的优势是什么。(本段的内容截取自2月12号的推文《一个好的程序架构应该是什么样的?》)

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++,其他的语言也一样。

已经看到这里啦!喜欢本文的小伙伴请点一下右下角的在看鼓励一下作者吧~


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

嵌入式Linux

微信扫描二维码,关注我的公众号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Cmake确实应该用到的时候再学

最近在做项目用到Cmake相关的知识,之前做的是BSP驱动开发,基本用不到Cmake,唯一和Cmake有交集的应该是我们移植网关项目,不过也只是修修改改,直到最近用到Cmake开发项目,才真正是接触了这个东西。前天加载一…

手机吞吃蛇游戏的设计与开发

为什么80%的码农都做不了架构师?>>> J2ME(Java 2 Micro Edition) 是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项新的开发技术。它定位在消费性电子产品的应用上,对设备的智能化、www.21cnlunwen.com Write…

如何用示波器测量串口波特率

这是前段时间遇到的问题,刚好这里找到了答案,记录下分享给大家。如何确定时基假如要测量的波特率为9600, 则每一比特位的时间为:1/9600 ≈ 104 μs,一般示波器横向上每个大格子里5个小格子,要想看清一比特位一般需要一…

Linux内核工程师是怎么步入内核殿堂的?

上图是公众号冠名参加的篮球赛对我来说,要搞好Linux内核,首先要做的就是买一块Linux开发板,然后就使劲捣鼓。下面是一位大神对于入门Linux内核的看法。以下的「我」不是公众号作者作者:Coly Lihttps://www.zhihu.com/question/304…

时间同步绝对是一个大问题

上图是加班看到的夜景假设A电脑时间和B电脑时间不同,当他们两个电脑的用户在使用电脑的时候就会存在问题,比如A电脑的用户说,我们下午5:00 去打球,然后A电脑到了5:00就去打球了,但是可能这个时候…

Window10彻底卸载应用商店

Window10如何彻底卸载应用商店?Window10应用商店就是一个应用下载平台,我们可以在应用商店中下载各种应用,但是很多用户并不喜欢在Window10应用商店中下载应用,觉得应用商店浪费内存,因此想将应用商店卸载掉&#xff0…

STM32F7xx —— QSPI

STM32F7xx —— QSPI 目录 STM32F7xx —— QSPI 一、QSPI 二、几个重要的函数 三、几个重要的结构 四、QSPI接口设计(仅供参考) 五、QSPI驱动W25Q256 一、QSPI SPI 是 Queued SPI 的简写,是 Motorola公司推出的 SPI 接口的扩展&#xf…

嵌入式、物联网常见通信协议

本文介绍一些常见的嵌入式、物联网通信协议,它们具有不同的性能、通信速率、覆盖范围、功率和内存,而且每一种协议都有各自的优点和或多或少的缺点。其中一些通信协议只适合小型家用电器,而其他一些通信协议则可以用于大型智慧城市项目。物联…

解决T400死机的问题!

终于解决这几天突然出现的t400 vista假死问题! 原来罪魁祸首是 ThinkPad -- Intel Matrix Storage Manager驱动程序(Windows XP/vista 32bit) 此更新在su自动更新里也有 千万别更新 如果不小心更新并出现偶尔假死(现象:鼠标能动,但是不能打开程序所有应用…

网络中路由器的工作原理

大家好,我是情报小哥!01路由器

C++学习(10)

1 //设计运算符重载的复数类2 #include<iostream.h>3 4 class Complex{5 private:6 double real;//实部7 double image;//虚部8 public:9 Complex(){ 10 real0; 11 image0; 12 } 13 Complex(do…

嵌入式真的没前途?

-上图是我的朋友邓总最近在互联网&#xff0c;然后从侧面了解了嵌入式的行业发展&#xff0c;嵌入式是离不开硬件的&#xff0c;但是硬件的话&#xff0c;又不只是靠硬件赚钱&#xff0c;如果硬件做不成一个产品&#xff0c;很难卖一个好价钱&#xff0c;就好比一个好的食材&am…

js for in 遍历对象与数组

遍历对象 let obj {q:9,w:5,e:2,t:7,c:3}//for in 遍历对象 key为对象的属性名称,遍历属性值时用[]操作符访问//通过[]操作符为对象添加属性或访问属性时&#xff0c;属性名称可以是任何字符串。for (let key in obj) {console.log(obj的key:,key, obj的value:,obj[key]);} …

前凸后翘的步进电机调速算法~

[导读] 大家好&#xff0c;我是逸珺。今天想分享一种超级实用的步进电机调速算法&#xff0c;这种算法在步进电机调速方案中可以说是一种非常优异的方案。梯形调速算法 为啥需要设计一个调速算法呢&#xff1f;步进电机不是给多少脉冲就动多少步吗&#xff1f;但是带上负载了就…

CentOS 7.3 系统安装配置图解教程

一、安装CentOS 7.3 CentOS 7.x系列只有64位系统&#xff0c;没有32位。生产服务器建议安装CentOS-7-x86_64-Minimal-1611.iso版本 成功引导系统后&#xff0c;会出现下面的界面 界面说明&#xff1a; Install CentOS 7 # 安装CentOS 7 Test this media & install CentOS …

朝花夕拾-不务正业的大学生做了什么比赛?

朝花夕拾&#xff0c;旧事重提之意。恰逢CSDN年终征文&#xff0c;所以写作本文为年终总结&#xff0c;实为大学四年的总结&#xff0c;和CSDN一起成长参与各类竞赛的回忆。四年里和小伙伴们一起辛苦奋斗做了那么多比赛&#xff0c;当比赛结束&#xff0c;那些作品便无人问津了…

我是在这里学到的Linux知识的

-上图是读者朋友圈照片&#xff0c;已咨询原创作者这是一个群友分享的学习资料&#xff0c;确实很棒。今天在上班&#xff0c;临近下班的时候&#xff0c;我到茶水间打水&#xff0c;当时下比较大的雨&#xff0c;从里面向外面看出去&#xff0c;看到蒙胧胧的一片&#xff0c;春…

c#字符型转化为asc_wap站 utf-8与 gb2312字符编码的转化函数

一般的wap站的编码都是<?xml version"1.0" encoding"utf-8"?>&#xff0c;所以用form 或者a 传递参数时会遇到乱码&#xff0c;在调用页面无法读取正确的中文字符&#xff0c;可以用一下的函数编译&#xff0c;转化成中文&#xff0c;然后调用Func…

Suct(一)

网址&#xff1a;https://github.com/ScutGame/Scut/wiki 优点&#xff1a;免费&#xff0c;教程多&#xff0c;又有Demo 贼好 【服务器框架层次结构图解】 &#xff08;好厉害~&#xff09; 【一、配置好 IIS Web 服务器】 1. 打开 控制面板 -> 程序和功能 -> 打开或关…

网校系统推荐eduline_网校系统的各项功能的用处

网校系统中有许多的子系统&#xff0c;其中众所周知也是相对重要的两个子系统&#xff0c;一个考试系统&#xff0c;一个直播系统&#xff0c;今天未来云校就来讲讲这两个子系统以及这两个子系统和网校系统的联系。在线模拟考试系统与网校系统大家都知道考试相对于学员、老师和…