C++之旅——入门(上)

打印 上一主题 下一主题

主题 981|帖子 981|积分 2943

Hello,各位小伙伴们,前几期我们学习了C语言和数据结构,有了一定的底子之后我们来挑衅新的语言——C++。
目次
一、初识C++
1>C++发展汗青
 2>C++版本更新
3>C++的热度
4>C++的学习难度
5>C++学习相干书籍
 二、第一个C++代码
三、C++底子
1>定名空间的先容
2>定名空间的使用
1、指定定名空间
2、使用using展开定名空间的指定成员
3、使用using展开整个定名空间
3>C++输入&输出​


一、初识C++

相信很多小伙伴和小编一样认为C语言和C++必然有着联系,确着实C语言诞生之后存在很多的不足,C++在其底子上进行不断的优化,逐渐演化为一门新的语言。让我们一起来阅读一下C++的发展史吧!
1>C++发展汗青

           C++的起源可以追溯到1979年,当时Bjarne Stroustrup(本贾尼·斯特劳斯特卢普,这个翻译的名字不同的地方大概有差别)在贝尔实行室从事计算机科学和软件工程的研究工作。面对项目中复杂的软件开发任务,特别是模拟和操作体系的开发工作,他感受到了现有语言(如C语言)在表达能力、可维护性和可扩展性方面的不足。
1983年,Bjarne Stroustrup在C语言的底子上添加了面向对象编程的特性,计划出了C++语言的雏形,此时的C++已经有了类、封装、继承等核心概念,为后来的面向对象编程奠定了底子。这一年该语言被正式定名为C++。​在随后的几年中,C++在学术界和工业界的应用逐渐增多。一些大学和研究所开始将C++作为教学和研究的首选语言,而一些公司也开始在产物开发中实行使用C++。这一时期,C++的标准库和模板等特性也得到了进一步的完善和发展。
        C++的标准化工作于1989年开始,并成立了一个ANSI和ISO(International Standards 
Organization)国际标准化组织的团结标准化委员会。1994年标准化委员会提出了第一个标准化草案。在该草案中,委员会在保持斯特劳斯特卢普最初界说的所有特性的同时,还增加了部分新特性。
        在完成C++标准化的第一个草案后不久,STL(Standard Template Library)是惠普实行室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实行室工作时所开发出来的。在通过了标准化第一个草案之后,团结标准化委员会投票并通过了将STL包含到C++标准中的提议。STL对C++的扩展超出C++的最初界说范围。虽然在标准中增加STL是个很重要的决定,但也因此延缓了C++标准化的进程。​
        1997年11月14日,团结标准化委员会通过了该标准的最终草案。1998年,C++的ANSI/IS0标准被投入使用。
   

 2>C++版本更新


这里给大家先容一些C++的网站https://legacy.cplusplus.com/reference/​
https://legacy.cplusplus.com/reference/%E2%80%8B
 这个网站是小编比力爱使用的对于一些不太清楚的函数使用直接搜索即可但较为官方的网站为
https://zh.cppreference.com/w/cpp​
https://zh.cppreference.com/w/cpp%E2%80%8B

 根据大家的喜欢来选择即可!
3>C++的热度

随着近几年的人工智能的发展,python的热度逐年升高,假如你已经学习完C语言了,在学习起来python就会非常顺手,这是本年语言热度排行榜。

C/C++名列前茅,但在一定程度上二者热度有所下降。

4>C++的学习难度

给大家看一个具有戏剧性的图片

 哈哈!也只是一个小小的玩笑,相信大家好好学习C++并不断训练就一定能够攻克难关。
5>C++学习相干书籍


这是小编在网上找到的三本比力推荐的书籍小编也才刚入门C++,但对于刚入门C++来说有一定难度,待我们有了一定的底子以后再来阅读也不迟。
三本书的先容:
   C++ Primer:主要解说语法,经典的语法书籍,前后中期都可以看,前期假如自学看大概会有点晦涩难明
STL源码剖析:主要从底层实现的角度结合STL源码,庖丁解牛式剖析STL的实现,是侯捷老师的经典之作。可以很好的帮助我们学习别人用语法是如何实现出高效简洁的数据结构和算法代码,如何使用泛型封装等。让我们不再坐井观天,闭门造车,本书课程上一半以后,中后期可以看。
Effctive C++:本书也是侯捷老师翻译的,本书有的一句评价,把C++步伐员分为看过此书的和没看过此书的。本书主要讲了55个如何正确高效使用C++的条款,建议中后期可以看一遍,工作1-2年后再看一遍,相信会有不一样的收获。
   二、第一个C++代码

任何一个牛掰的步伐猿第一个代码都是hello world 。
  1. #include<iostream>
  2. int main ()
  3. {
  4.     str::cout << "hello world " << endl;
  5.     return 0;
  6. }
复制代码
 让我们来对比一下C语言和python。
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     printf("hello world");
  5.     return 0;
  6. }
复制代码
  1. print("hello")
复制代码
由此也可以看出C++的复杂度。
三、C++底子

我们在做一个项目时,必要多人协作一起来完成,难免会有多个人使用同一个变量名,这样就会造成很大的贫困。以是在C++上加上定名空间这个概念。
1>定名空间的先容

namespace的界说:界说定名空间,必要使用到namespace关键字,后面跟定名空间的名字,然后接一对{}即可,{}中即为定名空间的成员。定名空间中可以界说变量/函数/范例等。​
让我们在VS上模拟一下:

 在这和步伐中我们在全局中界说了rand,但同时包含了头文件#include<stdlib.h>,在这个头文件中已经包含这个rand函数,会有重界说报错,这样就模拟了上述情景。在此情景下我们就必要使用定名空间域,namespace本质是界说出一个域,这个域跟全局域各自独立,不同的域可以界说同名变量,以是下面的rand不在冲突了。


假如想要访问此中的rand必要加上定名空间域名+::


同时定名空间域可以嵌套使用,比如:
  1. #include<iostream>
  2. namespace Sum
  3. {
  4.         namespace add
  5.         {
  6.                 int Fuction(int x, int y)
  7.                 {
  8.                         return x + y;
  9.                 }
  10.         }
  11.         namespace mul
  12.         {
  13.                 int Fuction(int x, int y)
  14.                 {
  15.                         return x * y;
  16.                 }
  17.         }
  18. }
  19. int main()
  20. {
  21.         printf("%d ", Sum::add::Fuction(2, 3));
  22.         printf("%d ", Sum::mul::Fuction(3, 4));
  23.         return 0;
  24. }
复制代码
我们在全局域中界说了定名空间域Sum,又在此中分别界说了add 和 mul,虽然里面的函数名称一致,但并不影响他们的使用。
多文件中可以界说同名namespace,他们会默认合并到一起,就像同一个namespace一样​。
2>定名空间的使用

我们指定输出或者查找一个变量时,起首会在局部范围内查找,其次在全局范围内查找,不会到定名空间里面去查找。以是下面步伐会编译报错。

 和上面一开始rand报错原因时一致的,我们可以通过三种方式办理:
1、指定定名空间

  1. #include<iostream>
  2. namespace byte
  3. {
  4.     int a = 1;
  5.     int b = 2;
  6. }
  7. int main ()
  8. {
  9.         
  10.     printf("%d ",byte::a);
  11.     return 0;
  12. }
复制代码
2、使用using展开定名空间的指定成员

  1. #include<iostream>
  2. namespace byte
  3. {
  4.     int a = 1;
  5.     int b = 2;
  6. }
  7. using byte::a;
  8. int main ()
  9. {
  10.         
  11.     printf("%d ",a);
  12.     return 0;
  13. }
复制代码
3、使用using展开整个定名空间

  1. #include<iostream>
  2. namespace byte
  3. {
  4.     int a = 1;
  5.     int b = 2;
  6. }
  7. using namespace byte;
  8. int main ()
  9. {
  10.         
  11.     printf("%d ",a);
  12.     printf("%d ",b);
  13.     return 0;
  14. }
复制代码
展开定名空间中全部成员,项目不推荐,冲突风险很大,一样平常小训练步伐为了方便推荐使用。
3>C++输入&输出​

   <iostream> 是 Input Output Stream 的缩写,是标准的输入、输出流库,界说了标准的输入、输出对象。
• std::cin 是 istream 类的对象,它主要面向窄字符(narrow characters (of type char))的标准输入流。
• std::cout 是 ostream 类的对象,它主要面向窄字符的标准输出流。​
• std::endl 是一个函数,流插入输出时,相称于插入一个换行字符加刷新缓冲区。​
• <<是流插入运算符,>>是流提取运算符。(C语言还用这两个运算符做位运算左移/右移)
• 使用C++输入输出更方便,不必要像printf/scanf输入输出时那样,必要手动指定格式,C++的输入输出可以自动辨认变量范例(本质是通过函数重载实现的,这个以后会讲到),实在最重要的是C++的流能更好的支持自界说范例对象的输入输出。​
• cout/cin/endl等都属于C++标准库,C++标准库都放在一个叫std(standard)的定名空间中,以是要通过定名空间的使用方式去用他们。
• 一般一样平常训练中我们可以using namespace std,实际项目开发中不建议using namespace std。​
• 这里我们没有包含<stdio.h>,也可以使用printf和scanf,在包含<iostream>间接包含了。vs系列编译器是这样的,其他编译器大概会报错.
   相信看到这里的小伙伴应该已经了解到了C++的第一个代码会是那样书写。
对于输入输出我们就有了大致的了解:

 初学的小伙伴可以会把cin的>>和cout<<搞混,小编在这里想到了一种便于影象的方法:
   在实行输入操作cin时箭头所指的方向便是输入的次序。
  在实行输出操作cout时,将cout看作输出终端,从左到右依次输出。
    • 缺省参数是声明或界说函数时为函数的参数指定一个缺省值。在调用该函数时,假如没有指定实参则采用该形参的缺省值,否则使用指定的实参,缺省参数分为全缺省和半缺省参数。(有些地方把缺省参数也叫默认参数)
• 全缺省就是全部形参给缺省值,半缺省就是部分形参给缺省值。C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。
• 带缺省参数的函数调用,C++规定必须从左到右依次给实参,不能跳跃给实参。​
• 函数声明和界说分离时,缺省参数不能在函数声明和界说中同时出现,规定必须函数声明给缺省值。
   

 在函数调用缺少参数的环境下,会默认在函数界说里面的参数,假如在函数调用时设置了参数,则会按照设置的参数进行。
这就有点像小编在学校里学习的python了,哈哈哈哈。
OK,今天的内容就到这里啦,小编会及时更新C++博客,盼望小伙伴们能够及时跟上小编的步伐,我们下期再见。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万有斥力

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表