01.C++入门笔记

一、C++的介绍

1、C++是在C的基础上发展起来的,C++比C多了面向对象、泛型并且弥补了C语言的一些不足。C++在编程时是兼容C语言的。

2、C++目前的主流版本:C++98和C++11

二、C++的基本知识

1、命名空间

①作用:解决命名冲突的问题。

②定义方式:

namespace 空间名{}                //不加分号

③使用:

1° 空间名::变量名/函数名/类名/结构体名等等          // ::是域作用限定符

2°using namespace 空间名;            //展开命名空间,这个命名空间中的内容都可直接使用

3°using 空间名::变量名/函数名/类名/结构体名/对象名                      //指定展开命名空间

▲定义一个结构体变量时:struct Node node;  指定命名空间写成: struct  空间名::Node node;

    原因是因为:在C++中定义一个结构体变量时可以省略struct

④注意:

1°命名空间可以嵌套定义。

2、输入输出

①基本知识

        <<  : 流插入运算符

        >>  : 流提取运算符

②输出:cout

1°cout可以自动识别变量的类型

2°不同类型的值可以一条语句输出

3°换行有两种方式:endl   或者   “\n”

③输入:cin

1°cin可以自动识别变量的类型

2°不同类型的值可以一条语句输入

④注意

1°如果要控制精度,或者有其它要求,C++不好完成的话可以使用C来解决。

3、缺省参数

①缺省参数就是在函数定义或者声明时给变量赋一个值

1°当调用函数时,如果没有传参则使用缺省值。

2°当调用函数时,如果传了参数,那么就使用传的参数。

②注意

1°缺省参数只能放在定义或者声明里,定义和声明中不能都存在。一般是在声明的地方给。

2°缺省值只能从右往左给,且必须是连续的。

3°调用函数传参时,不能跳过一个传给下一个,只能从左往右依次传。

4°缺省值必须是常量或者全局变量。

4、函数重载

①函数重载:函数名相同,参数不同(类型不同,个数不同,位置顺序不同),与返回值无关。

②注意:

        1°函数重载时使用缺省参数要仔细看好会不会存在二义性。

③函数重载的实现原理:

编译链接:

        1°预处理:头文件展开/宏替换/条件编译/去掉注释......  生成 .i 文件

        2°编译:检查语法,生成汇编代码  生成 .s 文件

        3°汇编:转换成二进制的机器码  生成 .o 文件

        4°链接:合并到一起,比如链接一些没有确定的函数地址  生成 a.out 文件

C链接函数地址时,用函数名去符号表中找(C语言不存在同名函数)函数名对应的那个地址。

C++链接函数地址时,用修饰完的函数名(编译器不同,修饰规则不同)去符号表中找函数名对应的那个地址。

5、引用

①引用的本质:引用的本质就是取别名。

②引用的定义:类型& 变量名=已有变量的变量名;

③引用的应用:

1°引用做参数

2°引用做返回值

        ▲局部变量出了作用域就销毁了,所以不能用引用做返回值,否则返回的结果是不确定的。

        ★用引用做返回值时,如果用引用接收,那么不会发生拷贝,如果用对应类型的变量接收,那么会发生一次拷贝。(如果某类型做返回值,会发生两次拷贝,首先拷贝到寄存器或者内存中,然后再从寄存器或者内存拷贝到接收返回值的变量)☆静态变量定义语句只会在第一次调用时执行。

3°引用做可修改的左值

④常引用:

1°权限不能放大,权限可以平移或者缩小;

2°给常量取别名必须要在前面加const,保持权限一致;

3°不管是隐式类型转换还是显示类型转换,都会产生一个临时变量,而临时变量都具有常属性,所以用不同的类型给别的类型的变量取别名的时候,前面要加const;

⑤指针和引用的区别:

1°语法上,引用不开空间,引用就是取别名;底层是用汇编实现的,实际上在底层是开了空间的;

2°语法和底层上,指针都是开了空间的,用来存放地址;

3°引用必须初始化,指针没有要求;

4°引用初始化之后不可以再改变指向,而指针可以再改变指向;

5°没有NULL引用,但有NULL指针;

6°在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是一个地址空间的大小(32位是4个字节,64位是8个字节);

7°引用自加即是所引用的那个实体自加,而指针自加是让指针向后偏移一个类型的大小;

8°有多级指针,但是没有多级引用;

9°访问实体方式不同,指针需要显示解引用,而引用,编译器会自己处理;

10°引用比指针使用起来相对安全,但不是绝对安全;

⑥优点:

1°提高效率 ,减少传递过程中的拷贝;

⑦注意:1°一个变量可以取多个别名;

           2°引用定义的变量与原变量的地址是相同的;

           3°引用必须初始化,初始化之后指向不能再改变;

6、内联函数

①作用:替代C中的宏函数;

1°宏的缺点:容易出错,语法细节多;不能调试;没有类型安全的检查;

2°宏的优点:不用建立栈帧,提高效率;

2°替换宏:enum const 替换宏常量;

                  inline           替换宏函数;

②优点:

1°不用建立栈帧,效率高,在程序中替换;

2°可以调试;

3°好写, 语法简单;

③缺点:

1°不适合大的函数,因为会在程序中展开,造成可执行程序过大。

2°inline不建议声明和定义分离,分离会导致链接错误,因为内联函数不会在符号表中;

④应用:适合于小函数(大约十行左右);

⑤说明:内联只是一个请求,而编译器可以忽略这个请求;大多数编译器不支持内联递归函数;

7、auto关键字(C++11)

①作用:自动推导类型;(如果是一个指针类型的可以写成auto*,引用的话可以写成auto&)

②应用:常应用在类型名较长的地方,让其自动推导;

③注意:

1°用auto定义一个变量,必须初始化,否则无法推导类型;

2°函数参数和返回值不能是auto类型的,因为在编译的时候无法确定其类型;

3°auto不能用来声明数组;(规定)

8、基于范围的for循环

①用法:for(auto/类型名 变量名:数组名){};

②注意:

1°遍历时取出来的值都是数组值的拷贝,如果想要改变数组的值就需要使用引用;

2°只有数组才能这样玩,数组的地址/数组首元素的地址都不可以这样玩;

9、指针空值(nullptr)

①出现原因:在C语言的库中,定义NULL为0了,有时会产生bug

②解决方法:C++定义了nullptr表示空指针,不需要包含头文件,因为nullptr是作为关键字引入的

③nullptr==(void*)0

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会算法的笨小孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值