目录
1>>前言
2>>函数重载
3>>引用
3.1>>引用的概念
3.2>>引用三大特性
3.3>>引用的使用
3.4>>const引用
3.5>>指针与引用的关系
4>>inline内联函数
5>>nullptr
6>>类和对象(上)——类的定义
6.1>>类定义格式
6.2>>访问限定符
6.3>>类域
7>>实质化
7.1>>概念
7.2>>对象大小
8>>this指针
9>>结语
1>>前言
上节课学习了命名空间、C++的第一个文件、输入输出流还有默认参数的概念和用法,中间因为学校的一些事情和比赛耽搁了一下更新,不好意思宝子们,小编在这说声抱歉。
今天我们来学习基础篇(包括函数重载、引用、inline、nullptr)and类和对象(上)(包括类的定义、实例化、this指针)。话不多说,准备上高速。
ps:如果有觉得小编哪里需要改进的欢迎指出,做出完美的C++篇章肯定少不了各位精神股东的支持啦,谢谢大家~
2>>函数重载
C++支持同一个作用域(局部、全局、静态)出现同名函数。有三种情况:
1.这些函数形参顺序不同。
2.这些参数个数不同。
3.这些参数类型不同
C++会对同名函数进行函数重载,通俗点说就是自动识别类型并且匹配对应函数使用,cin和cout本质上也是使用函数重载。
3>>引用
3.1>>引用的概念
引用:引用不是新定义的变量,而是给已知变量取别名,它不占用而外内存空间,而是和被引用变量共用一块内存空间。引用相当于现实生活中的别名(小名),例如我朋友叫李帅(化名),我们可以叫他小帅,小李,李哥等,本质上都是李帅。引用和C的指针差不多,可以说升级版。
格式:类型& 引用别名 = 被引用对象;
如上图,b就是a的别名,b和a共用一块内存空间,因此值相同(这两本质上是一个东西)
如上图,d还是a,举个例子,孙悟空,弼马温,行者孙都是同一个人。
3.2>>引用三大特性
1.引用定义时必须初始化:也就是int& b必须指向某个变量(不能只有小名,没名字)。
2.一个变量可以有多个引用:如3.1举的例子。
3.引用一旦引用一个变量(实体),就不能在引用其他实体:
例如int& b=a,b=c;并不能将b更改为c的别名,只能将c的值赋值给b(a)。
3.3>>引用的使用
引用主要用于减少拷贝提高效率和改变引用对象的同时改变被引用对象。
如下图:在传a,b时可以那它们的别名x,y接受,本质上x与a指向同一块地址空间,b与y指向同一块地址空间。怎么样,是不是感觉比C的指针简单很多
当然也可以对指针变量进行引用,别忘记它格式:类型& 引用别名 = 被引用对象;~
3.4>>const引用
使用const引用时,需要注意一个新词汇——权限,如下图:
归纳就是权限可以小于等于。知道了权限的概念,来试试题目吧:int& a=b*10;问:这个编译能过吗?
答案:不行,右边表达式结果保存在一个临时变量中,这个临时变量是常量,而左边的是动态变量,动态变量是常量的别名涉及权限放大,因此pass~!
注意:类型转换也会产生临时变量,都具有常属性。例如:double b=3.14;int& a=b;这就不行!!!
3.5>>指针与引用的关系
指针和引用相辅相成,各有其特,互相不可替代!!!
1.语法上别名不开空间;指针要开辟4/8字节空间。
2.引用必须初始化;指针不用。
3.引用引用一个对象后不能改变它的指向;指针可以改变指向,较为灵活。
4.引用可以直接访问被引用对象;指针需要解引用。
5.sizeof结果不同:引用为引用类型大小,指针固定4字节或者8字节。
6.引用比指针安全,野引用少。
4>>inline内联函数
内联函数inline其实就是C语言宏函数的升级替代版本,它比较适合频繁调用的短小函数(通常不超过十行)如下图:
5>>nullptr
在C语言中,NULL其实会遇到一些麻烦,例如:传NULL想调用f(int*)函数,却因为NULL值为0调用了f(int x)。
因此升级版本NULL出现了,它只允许被转换为指针类型,也就是空指针,而不能转换成整数类型。
6>>类和对象(上)——类的定义
6.1>>类定义格式
类是C语言中struct结构体的升级版。class是类的关键字。类中内容为类成员。类中的变量称为类的属性or成员变量。类中的函数称为类的方法or成员函数。在C++中struct也被升级为了类,可以跟C一个用法。
通常习惯在成员变量前面加上 _或者 m开头。定义在类面的成员函数默认为inline。
6.2>>访问限定符
分为三个分别是:public公共的、protected保护的、private私有的。保护和私有现阶段看成一个用法,后续学深入了才能体现出区别~
它们的范围就是从限定符出现开始,到下一个限定符或者“}”出现为止。
一般成员变量都是用private/protected,给大家使用的函数才会用public。
注意:class定义成员是默认权限为private,而struct默认为public。
6.3>>类域
可以理解为跟命名空间一个用法。如图:定义和声明不在一起时,需要指定类域。
7>>实质化
7.1>>概念
用类创建对象的过程称为“类实例化出对象”。在没有实质化时成员变量都只是声明,只有实质化才会被分配空间。如下图:就实例化出了两个对象。
7.2>>对象大小
跟struct差不多,都需要用到内存对齐,区别就是,没有成员变量时,类的大小为1。证明使用过这个类。如下图:sizeof(d1)=12;
8>>this指针
如下图:d1和d2都使用的Init,那编译器怎么知道用哪个参数呢?这里就有一个隐藏的this指针解决。往下看~
如下图:
这里就能确定调用的是谁~~
9>>结语
今日份C++入门就先到这里啦,来总结一下:主要讲了基础篇(包括函数重载、引用、inline、nullptr)and类和对象(上)(包括类的定义、实例化、this指针)。感兴趣的宝子们欢迎持续订阅小编,小编在这里谢谢宝子们啦~C++的学习很陡,时而巨难时而巨简单,希望宝子和小编一起坚持下去~你们的三连是我的动力,感谢支持~