引用、函数、哑元、结构体
树图思维导图提供 引用、函数、哑元、结构体 在线思维导图免费制作,点击“编辑”按钮,可对 引用、函数、哑元、结构体 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:77f4b9946b708b0d47c4de845bd6dc66
引用、函数、哑元、结构体思维导图模板大纲
定义
数据类型 + & +引用名 = 引用的目标
注:引用必须初始化
eg:int arr=100; int &ret=arr;
注意事项
1、引用必须进行初始化
2、引用和目标使用的是同一片内存空间
3、引用的数据类型和引用的目标的数据类型一致
4、引用一旦指明目标后,不能再引用其他目标
引用做函数的形参
被引用的变量,通过引用,传递给函数
特点
1.引用作为函数的形参和地址传参具有相同的效果,引用传递的是整个变量(包括变量值和变量地址)
2、引用作为函数的形参不需要额外的开辟空间
引用作为函数的返回值(与指针类似)
指针作为函数的返回值
1、指针函数可以返回全局变量的地址
2、实参传递过来的局部变量的地址
3、static修饰的局部变量的地址
4、不能返回,定义在本函数内部的局部变量的地址,可以返回生命周期长的局部变量的地址
引用~
返回生命周期长的变量的地址
1、static修饰的局部变量
2、全局变量
3、实参传递的变量
4、堆区申请的空间
引用作为函数的返回值,该函数是一个左值
左值
能够出现在赋值语句左边的表达式或变量。换句话说,左值是一个可以被赋值的表达式或变量。
eg
int &fun(int a,int b) { static int sum; sum=a+b; return sum;//int &fun=sum } fun(a,b)=100;
右值
表示一个表达式或对象,它们在程序执行期间将会被临时创建并存在于一个临时区域中。右值引用是C++11引入的新特性,允许我们绑定到这些临时对象,并对其进行修改或使用。
普通变量作为函数的返回值,是一个右值
常引用
格式
const 数据类型 &引用名 = 引用目标
特点
不能通过常引用的引用名来修改目标变量的值
用来保护数据
不允许用户,通过常引用修改目标,实现保护数据的功能,仍然可以通过目标本身进行值的修改。
数组的引用
数据类型 (&引用名)[]= 数组;
int arr[5]={4,1,9,7,5}; //定义rea作为arr数组的引用 int (&rea)[5] = arr;
指针的引用
数据类型 *&引用名 = 目标;
eg
int a = 101; int *p = &a; int *&rep = p;
new
1、申请单个空间
申请空间不初始化
new 数据类型
申请空间初始化
new 数据类型(n)---->n是初始化的值
2、申请连续空间
申请空间不初始化
new 数据类型【数据个数】
申请空间初始化
new 数据类型【数据个数】{初始值.................}
delete
1、释放单个空间
delte + 地址;
2、释放连续空间
delete +【】+地址
注意:【】内不要加个数
特点
1、函数名必须相同
2、形参不同(参数个数不同、参数类型不同),对于返回值没有要求
3、作用域相同
作用
实现一名多用(调用时,编译器会根据实参决定调用哪一个函数)
静态多态的一种
重载内部缩写eg
string add(string str1,string str2)
缩写:addSs
int add(int num1,int num2,int num3)
缩写:addiii
与c的区别
c语言中函数参数的值,只能从主调函数中获取
c++中支持默认参数,如果主调函数没有传参,就使用默认参数的值,如果主调函数传参就使用实际参数的值
注意事项
1、实参在传递时,是靠左2原则,所以函数的默认参数要靠右原则
2、只有参数右侧的参数全部设置默认值后,该参数才能设置默认值
eg:
int add(int num1,int num2,int num4,int num3=100)
用来占位,无实际意义
eg:int add(int num1,int num2,int,int num4) { return num1+num4; } int main() { cout << add(1,2,3,4) << endl; //实际参数3,在函数内部没有被变量接收,没有实际意义,起到占位作用 return 0; }
适用场景特点
适用于代码行数较少(5行以内)
调用频率比较高的函数
eg:inline int max(int num1,int num2) { return num1>num2?num1:num2; }
作用
建议编译器,在主调函数前展开函数
不一定展开
优缺点
优点
提高代码运行效率
缺点
可能会造成代码膨胀的问题
内联函数与带参宏的区别
处理阶段不同
内联函数在编译阶段编译
带参宏在预处理阶段处理
处理语句的复杂程度不同
带参宏只能完成简单的语法
内联涵函数可以完成稍复杂的语法
c++中的结构体
1-C++中的结构体,允许成员变量有默认值
eg:int age=10;
结构体eg:
Num//struct 可以不加 { public: //共有的,如果不写在结构体中所有的权限都是public int age = 20;//允许成员变量有默认值 int high; //C语言中,结构体嵌套时,需要定义出嵌套的结构体变量 //C++中可以直接嵌套结构体类型----》把n去掉 struct N { private: //私有的 float fat; //fat是N这个结构体的私有成员 public: //外部访问不了结构体内的私有成员fat, //但是结构体提供了一个public的接口,给外界展示fat的值 void show() { cout << fat << endl; } //提供一个公共的接口set,给私有的成变量fat赋值 void set_() { cin >> fat; } }n; void show(); };
2、c++在结构体内可以放声明一个结构体类型(即将结构体定义放在结构体中)
3、c++中定义时可以不放struct
4、C++中的结构体类,可以定义函数(结构体声明,结构体外定义)
5、c++结构体成员是有权限的,结构体中默认权限是public
c中的结构体
1-:c中的结构体,不允许成员变量有默认值
2-:c中的结构体不可以放声明,只能放结构体类型的变量
结构体中的三种权限
私有(private)
外界无法直接使用,通过人为提供接口
读取私有变量
结构体提供了一个public的接口,给外界展示fat的值 void show() { cout << fat << endl; }
修改私有变量
//提供一个公共的接口set,给私有的成变量fat赋值 void set_() { cin >> fat; }
保护(protected)
公共(public)
树图思维导图提供 一、研究内容 在线思维导图免费制作,点击“编辑”按钮,可对 一、研究内容 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:4f21797dd3e8b08f1951dfc24e7be94f
树图思维导图提供 二手书销售平台新航标 在线思维导图免费制作,点击“编辑”按钮,可对 二手书销售平台新航标 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:a92403b70afada50cf4fa4f56e0981c9