C++这么难,该怎么学?

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

下面就分享一下学习经验

如何学习C++

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

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

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

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

int main(){  printf("hello word") ; cout<<"hello word"; int a ; cin>>a}

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

C++知识难点总结

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

指针

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

比喻式理解:

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

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

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

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

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

指针示意图

泛型编程

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

为什么需要泛型编程

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

函数模板

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

voidchange(T& a,T& b){Ttemp = a;a= b ;b= temp ;}

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

测试一下

inta =10,b =20;  change(a,b);cout<

template<typename T>或template<class T>都可以,并且T类型参数可以有多个:template<typename T1, typename T2.....>

类模板

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

templateclassMyClass{public:  MyClass(T1& a ,T2& b):a_(a),b_(b){} ;T1&Func1();voidFunc2(T2& x);private:  T1 a_;  T2 b_ ;};templateT1&MyClass::Func1(){T1 temp =this->a_ ;return&temp ;}templatevoidMyClass::Func2(T2& x){this->b_ = x ;}

STL

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

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

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

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

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

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,446评论 1 51
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 8,892评论 0 13
  • 1. STL概述 STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非...
    长江小杨阅读 337评论 0 0
  • 1. STL概述 STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非...
    bilinbilin阅读 452评论 0 2
  • 重新系统学习下C++;但是还是少了好多知识点;socket;unix;stl;boost等; C++ 教程 | 菜...
    kakukeme阅读 19,422评论 0 50