你好,C++(2)1.3 C++世界版图1.4 如何学好C++
1.3 C++世界版图
C++语言的发展过程,不仅是一个特性不断增加、内容不断丰富的过程,更是一个在应用领域中不断攻城略地的过程。在其30余年的发展过程中,C++在多个应用领域都得到了广泛的应用和发展。无论是在最初的UNIX/Linux操作系统上,还是在Windows操作系统上,甚至是在最近兴起的嵌入式系统上,C++都占有不可取代的一席之地,如图1-3所示。
图1-2 C++世界三分天下
1.3.1 Windows系统下的C++开发
自从盖茨在1985年用C/C++完成了Windows 1.0之后,C++就与Windows操作系统结下了不解之缘。不仅Windows操作系统底层是使用C/C++开发的,而且Windows操作系统上运行的大多数大型软件也都是用C++开发的。可以说,Windows操作系统中流淌的是C++的血液。虽然现在Windows操作系统上的程序设计语言有很多,但是,C++以其自身得天独厚的独特优势和历史的积淀,在Windows平台上仍然拥有不可撼动的地位。
1. 得天独厚的优势
Windows操作系统本身是用C/C++开发的,两者之间的亲近关系,使得C++调用Windows API(Application Programming Interface,应用程序编程接口,通常是操作系统或编程框架所预先定义的一些函数,以便于程序员访问系统所提供的功能)有着天然的优势。因此,在开发与Windows操作系统相关的程序时,往往会优先考虑选择C++语言。
2. 历史的积淀
由于历史的原因,有很多运行在Windows操作系统上的应用程序都是使用C++开发的,而这些应用程序现在依然还需要继续维护和升级。因此,C++在Windows操作系统上有着先发优势。
1.3.2 UNIX/Linux系统下的C++开发
如果说在Windows操作系统下C++还有其他的竞争者,那么在UNIX/Linux操作系统下,C++几乎就是开发语言的不二选择了。
作为程序设计语言,C++在UNIX/Linux操作系统下的优势非常明显。首先,UNIX/Linux操作系统本身是用C/C++语言开发的,这使得操作系统本身对C++开发非常友好。另外,UNIX/Linux操作系统上大多是服务器端的应用,这些应用强调的是高性能和高安全性,而这恰恰是C++语言的强项。大多数UNIX/Linux上的应用都是使用C/C++开发的,比如著名的网络Web服务器Apache、数据库服务器MySQL等。因此,如果想在UNIX/Linux操作系统上开发应用,在对性能提出较高要求的同时还要求有较快的开发效率,那么C++必定是首选的开发语言。
1.3.3 嵌入式系统下的C++开发
随着各种各样数码产品的流行,嵌入式系统也逐渐成为了热门的开发领域。嵌入式系统特殊的硬件限制,使得嵌入式系统对开发语言有着特殊的要求。比如,受制于执行单元的指令集较小的原因,只能实现语法相对比较简洁的开发语言;嵌入式系统的内存容量比较小,要求对内存进行良好的管理;嵌入式系统的CPU主频比较低,要求可执行代码简洁高效;同时,为了提高开发效率,要求采用高级开发语言等等。嵌入式系统对开发语言的这些苛刻要求,根本难不倒C/C++语言,而且正好是C/C++的优势所在。C/C++的语法比较简单,可以在嵌入式系统上得到实现;它接近底层,可以对内存进行良好的管理;其编译生成的可执行代码简洁高效;其自身是高级程序设计语言,开发效率可以得到保证。C/C++很好地满足了嵌入式系统对开发语言的苛刻要求,几乎成为嵌入式系统开发的唯一选择。
1.4 如何学好C++
既然C++如此强大,那么我们该如何学好C++呢?
几乎每个C++初学者都会问这个问题。然而,这个问题并没有一个所谓的标准答案。作为一个C++世界的导游,我可以介绍一些知识和经验给大家,让大家少走弯路,沿着正确的方向前进,轻松愉快地完成C++世界的奇妙之旅。只要把握好下面这两个原则,至于具体的学习方法,则需要我们大家自己去寻找。
1.4.1 “多读多写多思考”是学好C++的唯一途径
C++是一门实践性很强的技术,我们不可能仅仅靠看几本书就学好了C++。还记得当年我们在学习英语的时候老师总是教导我们要“多听多说多读多写”吗?同样,学习C++也需强调“听说读写”。对于编程语言而言,虽然没有“听”和“说”,但是“多读”和“多写”也是同样适用的,再加上一个“多思考”,这才是学好C++的唯一途径。
1. 多读
多读就是强调多阅读和学习别人的优秀代码,特别是一些优秀的开源产品(例如,文本编辑器程序notepad++、FTP文件传输程序FileZilla等)的源代码。通过阅读这些源代码,不仅可以学习它所用到的具体的语言知识、开发技术,还可以从中学习它的设计思想、编程风格等。正所谓“近朱者赤,近墨者黑”,向高手学习,是成为高手的捷径。
2. 多写
多写,就是多多地进行开发实践。编程是一门技艺,它来自于实践,也必须回归到实践中去。纸上谈兵是无法学好编程的。多写包括很多方面,比如,在开发环境中完成书本上的例子程序,重新实现网络上的例程,开发实现一些小程序等。多读的目的只是学习别人的知识和经验,多写的目的才是将别人的知识和经验内化为自己的知识和经验。同时,通过多写可以在实践中发现很多在“多读”的过程中被隐藏的问题,让我们的认识和理解更加深刻。同时,通过自己编写程序、调试程序,可以获得宝贵的第一手开发经验,培养自己的动手能力,从而成为一个真正的高手。
3. 多思考
做到了上面的“多读多写”,可以让我们成为一个不错的开发程序员,但是却不能让我们成为一个专业的软件工程师。
“多读多写”强调的是代码实现的能力,但是,要想成为一个专业的软件工程师,仅仅只会写代码是远远不够的。我们还必须拥有设计的能力,拥有对问题进行抽象、分析、设计算法并最终用程序解决问题的能力。而“多思考”正是为了给我们补上设计这一课。
简单地说,优秀程序的每一个组成部分(类或者函数等)都是为了解决某个问题而专门设计的。那么,面对优秀的代码,我们需要思考的就是,这是一个什么问题?为什么要设计成这个样子?还有没有其他更好的方法?只有这样,才能明白优秀的代码为什么优秀。在遇到类似问题的时候,才会触类旁通,设计出同样优秀的代码。
在这个世界上,从来就没有哪一门程序设计语言是仅仅通过读一两本参考书而学会的,正如没有哪一个人仅仅读了《小说概论》就能学会写小说。我们必须不断地阅读、学习、思考他人的优秀代码,并且不断地亲自动手实践,将编码进行到底,才能真正地掌握一门程序设计语言。
1.4.2 和Google做朋友
在开发实践中,与其说程序是编出来的,倒不如说是“搜”出来的。在实际开发的时候,如果遇到一个语法上的细节问题,就可以用Google搜索关于C++的教程;如果遇到函数使用上的问题,就可以用Google搜索这个函数的文档;如果遇到常见的开发任务,比如打开并读取某个文件,就可以用Google搜索已有的示例代码。甚至当遇到程序中的疑难杂症时,还可以用Google搜索有没有人遇到相同的问题,看看他人是如何解决这个问题的。总之,编程开发活动离不开Google。网络就像一个大金矿,而Google就是采矿的机器。善用Google、和Google做朋友,可以帮助我们充分利用丰富的网络资源来学好C++,用好C++。
知道更多:如何“FQ”访问Google
因为众所周知的原因,虽然Google对于每个程序员来说都是最为有用的网站,可是在国内却一直无法正常地直接访问。为了访问Google,程序员们不得不大费周折,有的采用收费的VPN,有的采用http代理作为中转,有的采用内置“FQ”功能的特殊浏览器。这些方法要么是太费银子,要么是太过繁琐。一种更加简单实用的方法是:首先将系统的首选DNS服务器修改为42.120.21.30(OpenerDNS项目提供的DNS服务器,可以正确地解析Google的网址),然后通过访问https://www.google.com网址,就可以以加密的HTTP协议访问Google,从而避免被防火墙阻拦而实现对Google的正常访问。
相关文章:
你好,C++(2)1.3 C++世界版图1.4 如何学好C++
1.3 C世界版图 C语言的发展过程,不仅是一个特性不断增加、内容不断丰富的过程,更是一个在应用领域中不断攻城略地的过程。在其30余年的发展过程中,C在多个应用领域都得到了广泛的应用和发展。无论是在最初的UNIX/Linux操作系统上,…...
Ceph入门到精通- smartctl -l error检查硬盘指标
“smartctl -l error” 是一个 Linux 命令,用于查看磁盘驱动器的 SMART (Self-Monitoring, Analysis and Reporting Technology) 错误日志。SMART 是一种技术,能够监测硬盘驱动器的状态并提供关于硬盘健康状况的信息。 运行该命令后,你将看到…...
【LeetCode刷题】-- 161.相隔为1的编辑距离
161.相隔为1的编辑距离 方法:一次遍历 首先,我们要确认字符串的长度不会相差太远。如果长度差了2个或更多字符,那么 s 和 t 就不可能是一次编辑之差的字符串。 接下来,我们假设 s 的长度总是短于或等于 t 的长度。如果不是这样&…...
SQL进阶理论篇(八):SQL查询的IO成本
文章目录 简介数据库缓冲池查看缓冲池的大小数据页加载的三种方式通过 last_query_cost 统计 SQL 语句的查询成本总结参考文献 简介 本节将介绍磁盘IO是如何加载数据的,重点介绍一下数据库缓冲池的概念。主要包括: 什么是数据库缓冲池,它在…...
宝塔PostgreSQL设置数据库远程访问
宝塔PostgreSQL设置数据库远程访问 宝塔的PostgreSQL1. 添加数据库2. 打开PostgreSQL设置界面3. 修改配置4. 重载配置/重启数据库 Docker的PostgreSQL1. postgresql.conf2. pg_hba.conf3. 重启数据库 注意其他问题 宝塔PostgreSQL设置数据库远程访问?docker容器Post…...
蓝牙协议栈学习笔记
蓝牙协议栈学习笔记 蓝牙简介 蓝牙工作在全球通用的 2.4GHz ISM(即工业、科学、医学)频段,使用 IEEE802.11 协议 蓝牙 4.0 是迄今为止第一个蓝牙综合协议规范,将三种规格集成在一起。其中最重要的变化就是 BLE(Blue…...
XXE利用的工作原理,利用方法及防御的案例讲解
XXE(XML外部实体注入)利用是一种网络安全攻击手段,其中攻击者利用XML解析器处理外部实体的方式中的漏洞。这种攻击主要针对的是那些使用XML来处理数据的应用程序,尤其是当这些应用程序没有正确限制外部实体的处理时。通过XXE利用&…...
jpa 修改信息拦截
实现目标springbootJPA 哪个人,修改了哪个表的哪个字段,从什么值修改成什么值 import jakarta.persistence.*; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; im…...
JavaEE 09 锁策略
1.锁策略 1.1 乐观锁与悲观锁 其实前三个锁是同一种锁,只是站在不同的角度上去进行描述,此处的乐观与悲观其实是指在预测的角度上看会发生锁竞争的概率大小,概率大的则是悲观锁,概率小的则是乐观锁 乐观锁在加锁的时候就会做较少的事情,加锁的速度较快,但是消耗的cpu资源等也会…...
javacv的视频截图功能
之前做了一个资源库的小项目,因为上传资源文件包含视频等附件,所以就需要时用到这个功能。通过对视频截图,然后作为封面缩略图,达到美观效果。 首先呢,需要准备相关的jar包,之前我用的是低版本的1.4.2&…...
Fiddler中AutoResponder的简单使用
AutoResponder,自动回复器,用于将 HTTP 请求重定向为指定的返回类型。 这个功能有点像是一个代理转发器,可以将某一请求的响应结果替换成指定的资源,可以是某个页面也可以是某个本地文件 1.使用 打开“Fiddler”,点击…...
K8S(一)—安装部署
目录 安装部署前提以下的操作指导(在master)之前都是三台机器都需要执行 安装docker服务下面的操作仅在k8smaster执行 安装部署 前提 以下的操作指导(在master)之前都是三台机器都需要执行 关闭防火墙 [rootk8smaster ~]# vim /etc/selinux/config [rootk8smaster ~]# swa…...
Kubernetes Pod 网段与主机内网网段互通
开发环境的需求 开发环境部署 K8s 后,服务器会部署在 K8s 里,通常 Pod 网段被隔离,主机无法访问 实际开发需求,往往需要当前开发调试的服务主机本地部署,其他服则在 K8s 内 因此,使用 K8s ,必…...
go学习redis的学习与使用
文章目录 一、redis的学习与使用1.Redis的基本介绍2.Redis的安装下载安装包即可3.Redis的基本使用1)Redis的启动:2)Redis的操作的三种方式3)说明:Redis安装好后,默认有16个数据库,初始默认使用0…...
娱乐新拐点:TikTok如何改变我们的日常生活?
在数字时代的浪潮中,社交媒体平台不断涌现,其中TikTok以其独特的短视频内容在全球范围内掀起了一场娱乐革命。本文将深入探讨TikTok如何改变我们的日常生活,从社交互动、文化传播到个人创意表达,逐步改写了娱乐的新篇章。 短视频潮…...
【Nginx】Nginx了解(基础)
文章目录 Nginx产生的原因Nginx简介Nginx的作用反向代理负载均衡策略动静分离 Nginx的Windows下的安装Linux下的安装Nginx常用命令 负载均衡功能演示 Nginx产生的原因 背景 一个公司的项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发…...
十九)Stable Diffusion使用教程:ai室内设计案例
今天我们聊聊如何通过SD进行室内设计装修。 方式一:controlnet的seg模型 基础起手式: 选择常用算法,抽卡: 抽到喜欢的图片之后,拖到controlnet里: 选择seg的ade20k预处理器,点击爆炸按钮,得到seg语义分割图,下载下来: 根据语义分割表里的颜色值,到PS里进行修改: 语…...
虚拟机VMware安装centos以及配置网络
目录 1、CentOS7的下载2、CentOS7的配置3、CentOS7的安装4、CentOS7的网络配置 4.1、自动获取IP4.2、固定获取IP 5、XShell连接CentO 准备工作:提前下载和安装好VMware。VMware的安装可以参考这一篇文章:VMware15的下载及安装教程。 1、CentOS7的下载 …...
call 和 apply:改变对象行为的秘密武器(上)
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
工作中 docker 的使用积累
2 进入 openwrt 容器 docker exec -it openwrt /bin/sh3 查看 docker 信息 docker info4 启动容器 4 挂载 overlay mount -t overlay overlay -o lowerdirA:B,upperdirC,workdirworker /tmp/test -t overlay : 指定要挂载的文件系统类型为 overlayoverlay: 指定…...
初识SpringSecurity
目录 前言 特点 快速开始 导入依赖 运行项目 访问服务 权限控制 实现UserDetails接口 添加SecurityConfig配置类 测试接口DemoController 设置权限控制authorizeHttpRequests 结果分析 总结 前言 Spring Security是一个强大且高度可定制的身份验证和访问控制框架…...
大数据讲课笔记1.4 进程管理
文章目录 零、学习目标一、导入新课二、新课讲解(一)进程概述1、基本概念2、三维度看待进程3、引入多道编程模型(1)CPU利用率与进程数关系(2)从三个视角看多进程 4、进程的产生和消亡(1…...
技术点:实现大文件上传
大文件上传 实现思路 对于大文件上传考虑到上传时间太久、超出浏览器响应时间、提高上传效率、优化上传用户体验等问题进行了深入探讨,以下初略罗列各个知识点的实现思路: 大文件上传对文件本身进行了文件流内容 Blob 的分割,使用 Blob.pr…...
记一次挖矿病毒的溯源
ps:因为项目保密的原因部分的截图是自己在本地的环境复现。 1. 起因 客户打电话过来说,公司web服务异常卡顿。起初以为是web服务缓存过多导致,重启几次无果后觉得可能是受到了攻击。起初以为是ddos攻击,然后去查看web服务器管理…...
day05-报表技术-图形报表
1、图表报表简介 在大数据时代,人们需要对大量的数据进行分析,帮助用户或公司领导更直观的察觉差异,做出判断,减少时间成本,而在web项目中除了表格显示数据外,还可以通过图表来表现数据,这种…...
【Spring】@Transactional事务属性详解
文章目录 1、事务传播行为注意事务传播行为在不同类之间调用生效Propagation.REQUIRED(默认传播行为)Propagation.REQUIRES_NEWPropagation.NESTED 2、事务的隔离级别隔离级别设置 3、设置事务异常回滚3.1、默认情况3.2、设置回滚异常3.3、设置不回滚的异常 4、超时时间5、只读…...
通过css3的锚定滚动属性,实现分页加载时让滚动条不闪动
html标签 <div scroll"handleScroll" id"list-container"style"overflow-anchor:auto;overflow-y: auto;height: 80vh"><ul id"talks"v-for"(item,index) in msgList":key"item.roleiditem.timeitem.conten…...
使用Selenium与Scrapy处理动态加载网页内容的解决方法
博客正文(包含详细注释) 引言 在爬虫技术领域,处理动态加载的网页内容常常是一项挑战,尤其是对于那些通过用户滚动或其他交互动态加载更多内容的网站。本文将介绍如何结合使用Selenium和Scrapy来有效处理这类网页。 初探Seleni…...
Linux的权限(二)
目录 前言 文件类型和访问权限(事物属性) 补充知识 文件类型 文件操作权限 修改文件权限 chmod指令 文件权限值的表示方法 字符表示方法 8进制数值表示方法 权限有无带来的影响 修改文件角色 chown与chgrp指令 目录的rwx权限 补充知识 …...
网络服务IP属地发生变化的原因有哪些?
近期,许多用户发现自己的网络服务IP属地发生了变化。原本固定的IP地址不再是静态的,而是发生了变动。这一现象引起了广大用户的关注和疑惑,对网络服务的使用和信息安全产生了影响。为了解决用户的疑虑,我们对此现象进行了深入探究…...
广州 网站建设 行价/合肥网络公司
1、在slave1:3306从库进行备份innobackupex --defaults-file/mysql/mysql57/my.cnf --userroot --passwordxxx --socket/mysql/mysql3306/tmp/mysql.sock --slave-info /mysql/innobak2、在从库slave2上新启3307实例进行恢复并与线上master进行同步1)slave2&…...
定制网站开发报价/app推广赚钱平台
Java Q&A: 使用Factory Method模式 (转)[more]Java Q&A: 使用Factory Method模式Q: 阅读 "Polymorphism in its purest form" 一文时,我看到了一个不熟悉的术语 "Factory method"。你能解释一下什么是Factory method并说明如何使用它吗…...
还有专门给别人做性奴的网站/百度图片查找
1.介绍 一个一个遍历 定义: 提供一种方法,顺序访问一个集合对象中的各个元素,而不暴露该对象的内部表示 适用场景: 访问一个集合对象的内容而无需暴露它的内部表示 为遍历不同的集合结构提供一个统一的接口 优点: …...
杭州学网站建设/seo怎么做?
整体目标 在这一篇中,我们将使用Jenkins在此基础上构建一条完整的持续交付流水线,并且让团队不同成员能够基于该流水线展开基本的协作。开发: 持续提交代码并能够通过持续集成(CI)过程快速获取反馈,在通过C…...
网站数据库 权限设计/交换链接营销实现方式解读
1、项目背景 https://passport.csdn.net/login CSDN登录页面 2、功能实现 自动运行用例 自动生成测试报告 自动断言与截图 自动将最新测试报告发送到指定邮箱 数据,页面元素分离 PageObjectUnittestddt数据驱动用例 执行日志、分布式执行 3、项目架构…...
python web网站开发/媒体发稿平台
C程序设计实验报告 实验项目: 1、利用复化梯形公式计算定积分2、计算Ackerman函数3、编写计算x的y次幂的递归函数getpower(int x,int y),并在主程序中实现输入输出4、编写计算学生年龄的递归函数5、编写递归函数实现Ackman函数 姓名:张时锋 …...