怎样学c++程序语言,如何学好 C++——学习门槛最高的编程语言

根据InfoQ 编程语言 2 月排行榜,统计发现,学习门槛最高的编程语言是 C++。那么如何学好这门又难、门槛又高的语言呢?

前面我们介绍过C++。

a261d8080cbe1896f85a9c263e6a8d4a.png

C++是一种面向对象的计算机程序设计语言,由美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普博士在20世纪80年代初期发明并实现,最初它被称作“C with Classes”(包含类的C语言)。它是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言,支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格.

C++是C语言的继承,进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。

C++以其复杂的语法、指针、内存管理、泛型编程等特性难倒了一大批IT学子。小编以CSharp入门,中途转C++的时候痛苦过一段时间,不过随着业务能力的精进,已经逐渐爱上这门功能强大、灵活的语言了。

下面就分享一下学习经验:

关于如何学习C++,这个问题光嘴讲是没用的,还是需要自己动眼、动手、动脑。总结下来就无非这三个步骤:

1.学

学,不管是看书、看视频、还是参参加培训都可以,至少要系统化且持续性的去学习这门语言。个人建议如果有条件参加培训是最好的,如果没有可以看视频学习。但是不管是哪种方式,我都推荐大家一定要看书,跟着书本学习。不管你是培训还是看视频,思路都是跟着别人走的,只有看书才会有自己的理解,才更深刻。

980e5f0897573571a199ee4f7d16cd01.png

2.抄

抄,此处意为对着教程上的代码抄或者半key半抄,至少要将项目通过自己的手实现,并且能正常运行。这个过程是十分痛苦的。很多人可能在学知识的时候觉得自己都会,但是一到自己key的时候就捉襟见肘了,甚至对着抄debug时仍是一大堆错误,这段时间是怀疑人生的时间,一定要坚持、坚持、再坚持。

比如最简单的helloword、文件读取、标准流输入输出等

int main()

{

printf("hello word") ;

cout<

int a ;

cin>>a

}

3.写

等熟练到一定程度,就需要自己是独立实现一个小功能或者开发一个小项目了,这中间一定会遇到很多问题,可以查资料、查教材、咨询其他人等。等你能独立实现自己想实现的功能的时候,那么恭喜你已经入门了,后面会越来越顺利。

下面总结一些C++学习的难点:

指针

关于指针已经讲过很多次了。理解指针你需要先理解计算机内存和内存地址概念,还有*和&运算符。

388e9a715025ed4cf594e58956a770e0.png

比喻式理解:

内存可以理解为土地,内存地址理解为土地编号,当我们的程序在创建变量和对象时,计算机会充当规划局的角色为变量和对象划分一块有编号的土地存放变量和对象,这就叫内存,而编号就叫内存地址。土地有使用期限(70年),期限后收回,计算机中变量和对象释放时也会释放内存被回收。

指针:指针本身也是一个变量,类似int或者float类型,只不过int存放的是10、146等这样的整型数据,而指针变量存放的是内存的地址。

*运算符:取内存地址上所存对象。

&运算符:取对象所在内存的地址。

指针指向:我们常说的某某指针指向谁,意思是,这个指针变量存放着那个对象在计算机内存中的地址。

泛型编程

C++的泛型是基于模板实现的。不管是类模板或是函数模板,都不是真正的类或函数,只是一个编译器用来生成代码的蓝图。

为什么需要泛型编程呢?

最简单的一个例子,假设你实现了一个链表的类,可以用来动态存储int型数据。但是现在又有一个需求是动态存储string类型的数据,这时候你怎么办呢?重新为存储string数据的链表单再实现一个类?这显然是不符合代码重用性原则的,这时候你可能会想到能不能将数据类型用参数的方式传进去。这就是C++泛型编程的由来;

函数模板

9382ec70b8e6893079b092fd286578b5.png

数据的类型也可以通过参数来传递,若在函数定义时可以不指明具体的数据类型,当发生函数调用时,编译器才根据传入的实参进行自动地推断数据类型,这样就实现了函数的模板。利用虚拟的类型来作为一个标识符来占位,等发生函数调用时再根据传入的实参来反向推断出真正的类型。

void change(T& a,T& b)

{

T temp = a;

a = b ;

b = temp ;

}

上面的代码实现了一个两个数交换的通用模板函数,T类型就是那个占位标识符。该模板实现了一个函数可以交换任意数据类型的两个参数。

测试一下

int a = 10,b = 20 ;

change(a,b);

cout<

string c = "i love u",d = "i love u too";

change(c,d);

cout<

template或template都可以,并且T类型参数可以有多个:template

类模板

类模板中定义的类型参数可以用在类声明和类实现中。类模板的目的同样是将数据的类型参数化。

template

class MyClass

{

public:

MyClass(T1& a ,T2& b):a_(a),b_(b){} ;

T1& Func1();

void Func2(T2& x);

private:

T1 a_;

T2 b_ ;

};

template

T1& MyClass::Func1()

{

T1 temp = this->a_ ;

return &temp ;

}

template

void MyClass::Func2(T2& x)

{

this->b_ = x ;

}

STL

C++的泛型本来就是为了STL而推出的,STL(标准莫板块) 包含常用数据结构(如链表、可变长数组、排序二叉树)和算法(如排序、查找)的模板。它是一个十分强大且实用的库。

STL中容器即实现在类模板的基础上。算法如排序、查找等算法是实现在函数模板的基础上。

C++STL容器分顺序容器和关联容器。顺序容器包括:可变长动态数组 vector、双端队列 deque、双向链表 list。它们的元素与位置顺序有关,与元素大小无关。关联容器包括:set、multiset、map、multimap。关联容器内的元素是排序的,元素的顺序直接关联元素本身,没有物理顺序。

49b4d87d32cc3002591c0b80674b628b.png

任何容器都自带迭代器函数,他们是:

begin():返回指向容器中第一个元素的迭代器。

end():返回指向容器中最后一个元素后面的位置的迭代器。

rbegin():返回指向容器中最后一个元素的反向迭代器。

rend():返回指向容器中第一个元素前面的位置的反向迭代器。

举报/反馈

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

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

相关文章

首个JDK 10(18.3)发行候选版(内部版本43)展示了新的版本控制方案

Mark Reinhold的帖子“ JDK 10&#xff1a;First Release Candidate ”宣布“内部版本43中没有未解决的P1错误”&#xff0c;并将Build 43命名为最初的JDK 10版本候选 。 Reinhold帖子还指向“ JDK 10 Early Access Builds ”页面&#xff0c;该页面包含发行说明的链接。 到基于…

7 centos 查看程序文件数量_CentOS之使用Systemd添加自定义系统服务

文章引言Systemd 就是为了解决Linux 的启动一直采用init进程问题而诞生的。它的设计目标是&#xff0c;为系统的启动和管理提供一套完整的解决方案。根据 Linux 惯例&#xff0c;字母d是守护进程&#xff08;daemon&#xff09;的缩写。 Systemd 这个名字的含义&#xff0c;就是…

做完c语言通讯录系统后的小结,c语言通讯录管理系统的总结

c语言通讯录管理系统的总结c语言通讯录管理系统的总结c语言课设管理系统总结完成情况防暴力输入密码加密输入并删除管理员和用户端两个端管理员对用户的账号删除注册用户用户的账户名及密码修改用户基本操作管理员基本操作存在的问题管理员无法对用户的数据进行修改未使用链表由…

因特尔显卡自定义分辨率_电脑显示器分辨率超频教程:1080P超2K分辨率的方法...

我们玩过CPU超频、显卡超频、内存超频等&#xff0c;相信不少用户还没有尝试过显示器超频&#xff0c;其实在前段时间&#xff0c;装机之家为广大爱好者发布了一篇【电脑显示器刷新率怎么超频&#xff1f;电脑显示器提高屏幕刷新率超频教程】文章&#xff0c;我们将一款普通60H…

Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射

大家好&#xff0c;这是我在该博客上发表的有关Java 9功能的第一篇文章&#xff0c;今天您将了解我最喜欢的功能“收集的工厂方法” &#xff0c;它是JEP 269的一部分。JEP代表JDK增强建议。 如果您曾经在Groovy或Kotlin工作过&#xff0c;那么您就会知道使用集合文字使用元素创…

郴州郴锦机器人_减税降费宣传走进郴州市民营企业高质量发展专题培训班

红网时刻郴州8月23日讯(通讯员 陈磊 记者 欧群军)“毫不动摇支持民营经济健康发展离不开税收政策的有力支持。近年来&#xff0c;特别是今年以来国家系列税收优惠政策的出台&#xff0c;为民营经济的发展注入了新的活力。”8月22日&#xff0c;郴州市税务局减税降费宣讲课堂走进…

FPGA(8)--频率计检测控制系统

文章目录一、设计要求1.整体控制系统设计要求2.频率计检测设计要求二、设计思路1.确定VHDL描述与原理图相结合完成设计2.确定状态情况3.数码管显示功能三、设计内容1. 频率检测部分VHDL描述2. 七段数码管显示部分VHDL描述3. 系统主控制部分VHDL描述4.将三个部分的VHDL描述分别都…

lda进行图片分类_LDA主题模型

今天来啃硬骨头了&#xff0c;说说LDA主题模型。本文言简意赅&#xff0c;没有太多的数学公式。学习也不要太多的陷入算法的细枝末节之中&#xff0c;学习复杂的事物&#xff0c;需要从整体去把握。先列出本文的讲解顺序。什么是LDA模型2. 函数与 Beta函数3.共轭先验分布4.二项…

FPGA(1)--VHDL--6选1数据选择器

一、实验目的 掌握用VHDL语句进行组合电路设计的方法&#xff0c;并熟悉程序的编译、调试与波形图的仿真。 二、实验内容 分别用VHDL的CASE语句及IF语句两种方法&#xff0c;设计6选1数据选择器。通过编译、仿真验证功能正确性。 三、实验设计 设计的依据&#xff1a;教材…

android+4.4+jni闪退,native2.1 安卓退到后台时,概率闪退

赞同来自:同样的&#xff0c;在这个时候&#xff0c;还出了另一个错误&#xff0c;详情见下面的log,这个问题&#xff0c;出现的情况就和上面的不同&#xff0c;从5.0 - 9.0 &#xff0c;level 22- level 28 &#xff0c;都在出这个错误&#xff0c;真的搞不太清楚是为什么&…

java 模板方法设计模式_Java中的模板方法设计模式

java 模板方法设计模式模板方法是一种行为设计模式 &#xff0c;用于创建方法存根并将某些实现步骤推迟到子类。 模板方法定义了执行算法的步骤&#xff0c;它可以提供默认实现&#xff0c;该实现对于所有或某些子类可能是通用的。 让我们通过一个例子来理解这种模式&#xff…

FPGA(2)--例化语句--1位全加器

文章目录一、实验目的二、实验内容三、实验设计四、实验结果及仿真一、实验目的 熟悉元件封装方法&#xff0c;掌握层次化电路设计方法&#xff1b;掌握VHDL例化语句的设计方法。 二、实验内容 1.用VHDL语言设计1位全加器&#xff0c;其中仅就半加器实体进行例化声明及端口映…

对mysql的总结与反思_一次DB故障引起的反思和MySQL Operator选型

前言在一次数据库故障后&#xff0c;我们发现业务库会根据业务的等级会划分多个 MySQL 实例&#xff0c;许多业务库会同时属于一个 MySQL 实例&#xff0c;当一个库引发问题后整个实例的状态是不可控的。从而导致这个实例上的所有业务不稳定甚至造成中断。故障反思微服务架构微…

android 三星 拍照,安卓里面拍照最好的三个品牌,OPPO华为三星怎么选

原标题&#xff1a;安卓里面拍照最好的三个品牌&#xff0c;OPPO华为三星怎么选几乎每一个节日都能被国内的商家抓住并且成功的策划为一次次的「购物节」&#xff0c;双十一、双十二等无一例外&#xff0c;3月7日这个从中国高校里衍生出来的「女生」节如今也成为了「女神节」。…

FPGA(3)--VHDL及原理图--4位全加器

文章目录一、实验目的二、实验内容三、实验设计五、实验思考与总结一、实验目的 掌握例化语句的使用方法&#xff0c;掌握使用程序文本和原理图结合方法设计电路&#xff0c;掌握利用包含算术操作符的重载函数的使用。 二、实验内容 首先用VHDL语言设计1位全加器&#xff0c…

Vertx编程风格:您的反应式Web Companion REST API解释了

Vertx提供了许多在轻量级环境中进行编程的选项&#xff0c;例如node.js。 但是&#xff0c;对于新用户来说&#xff0c;选择采用哪种方法来创建REST API几乎不会造成混淆。 在vertx中编程时可以采用不同的模型。 下面通过易于理解的图表对其进行说明。 PS – vertx编程的核心…

过去式加ed的发音_小学英语动词过去式归类总结

小学英语动词过去式归类总结  一、动词过去式的规则变化 1. 一般情况下&#xff0c;动词词尾加-ed 如&#xff1a;work ---worked, play---played, want----wanted, act----acted 2. 以不发音的 -e 结尾动词&#xff0c;动词词尾加 -d 把动词原形最后的e去掉&#xff0…

FPGA(4)--VHDL--4位D触发器

一、实验目的 掌握利用VHDL语言&#xff0c;进行基本时序元件的设计。 二、实验内容 利用VHDL语言设计含异步复位&#xff08;RST&#xff09;及使能端&#xff08;EN&#xff09;的4位D触发器&#xff0c;其中输入D及输出Q均为4位&#xff08;STD_LOGIC_VECTOR&#xff09;…

鸿蒙10 5G手机,继鸿蒙后麒麟V10问世 5G时代国产操作系统将起飞

(记者 陈洲)从工信部获悉&#xff0c;中国电子近日在广州发布了银河麒麟操作系统 V10。该系统打通了手机、平板、PC 等多个终端&#xff0c;可谓为5G时代量身定做。其独创的 kydroid 技术&#xff0c;可将安卓应用无缝迁移到国产平台上。银河麒麟V10是继华为鸿蒙OS后&#xff0…

模糊查询关键字不区分大小写_SQL简单查询

SQL书写规则&#xff1a;1)以英文分号结尾(;) eg. select 姓名,性别 from student&#xff1b;2)不区分关键字的大小写。就像Excel里面sum可以大写可以小写。同理&#xff0c;SQL中select不区分大小写。3)列名不能加单引号&#xff0c;列名中间不能有空格。4)所有符号都要是英文…