引用、函数默认参数、类和对象
#include
using namespace std;
#include
#include
int main()
{
/*
函数默认参数:返回值类型 函数名(参数=默认值){}
1.如果某个位置已经有了默认参数,那么从这个位置往后,从左向右都必须右默认值
2.如果函数声明有默认参数,函数实现就不能有默认参数(两者只能有一个)
函数占位参数:返回值类型 函数名(数据类型){},占位参数可以有默认参数:例如int func(int =10)
函数重载(可以让函数名相同,提高复用性)条件:同一个作用域下,函数名称相同,函数参数类型不同或个数不同,引用可以作为重载条件
内存分区模型: 1.代码区:存放函数体的二进制代码,操作系统进行管理。特点:共享,只读
2.全局区:存放全局变量和静态变量以及常量(字符串常量、const修饰的全局变量(全局常量))(全局变量:不在函数体内的变量)
3.栈区:编译器自动分配释放,存放函数的参数值、局部变量(包括const修饰的局部变量)等
4.堆区:程序猿分配和释放或程序结束后由操作系统回收,堆区手动释放:delete.
new的基本语法: new 数据类型(变量初始值) (new返回的是该数据类型的指针),释放:delete 变量;
new 数据类型[] (在堆区创建10个整形数据的数组) 释放:delete[] 变量;
引用:给变量起别名。语法:数据类型 &别名=原名。例子:int a=1; int &b=a;
引用必须初始化,初始化后不可以改变
函数传参时,可以利用引用的技术让形参修饰实参(和地址传递效果一样)。例子:void func(int &a1,int &b1) { int temp=a1;a1=b1;b1=temp} func(a,b);
引用做函数的返回值: 1.不要返回局部变量的引用(局部变量处于栈区,运行完,系统释放)
2.函数的调用可以作为左值
引用的本质:指针常量
int &red=a(系统自动转换为 int * const ref=&a)
ref=10(如果ref为引用类型,系统自动转换为解引用*ref=10)
常量引用:修饰形参,防止误操作。例子: void func(const int &a) {int a=10;}
引用必须引一块合法的内存空间.int &ref=10(错);const int &ref=10(√)(原因:编译器优化代码,int temp=10;const int &ref=temp)
类和对象:
类:class
通过类实例化(创建一个对象),并给对象属性赋值,通过点.可以访问对象中的属性
class 类名 {属性、行为}类中的属性和行统称为成员,属性:成员属性,成员变量。行为:成员函数、成员方法
访问权限: 1.public 成员类内外可以访问
2.protected 成员类内可以访问,类外不可以访问(子类可以访问父类的保护内容)
3.private 成员类内可以访问,类外不可以访问
struct 默认公共权限 public
class 默认私有权限private
*/
system("pause");
return 0;
}