c++笔记第四天

内存分区模型
        代码区:存放函数体二进制代码(代码共享和只读)
        全局区:存放全局变量和静态变量 (程序结束由操作系统释放) (在普通变量前加static属于静态变量)
        栈区:由编译器自动编译释放,存放函数的形参,局部变量,程序结束由系统释放( 不要反回局部变量的地址)
        堆区:由程序员分配和释放,若程序员不释放程序结束时由系统释放回收,

在c++中利用new来开辟内存返回开辟该数据类型的指针
  int *p=new int(10)
用delete释放
  delete p;
释放堆区数组时要加[ ];

1 int *arr =new int[10];
2 delete[ ] arr;

 

 

不同区域存放的数据赋予不同的生命周期,便于灵活编程。

引用的使用
作用给变量起个别名
  格式
    数据类型 &别名=原名

注意:
    引用必须初始化
    引用初始化后不可以改变


引用做函数参数
    函数传参时可以用引用来让形参修饰实参,以简化执政修饰实参。
      void Myswap(int &a,int &b);

    引用作为函数返回值

1 int& test()    
2 {
3     static int a=20;//返回静态变量
4     return a;
5 
6 }

 

 

注意
    不要返回局部变量的引用
    函数调用可以作为左值

1 int& test()
2 {
3 
4     static int a=10;
5     return a;
6 
7 }
8 test()=1000;

 

 

引用的本质
  int a=20;
  int& b = a;//相当于 int *const b=&a;
  在C++中引用的本质在内部实现就是一个指针常量

const修饰的常量引用
  使用场景:用来修饰形参,防止误操作。
  const int& ref =10;//相当于int tem =10;const int &ref =tem;

 

函数的默认参数
    在c++中函数的形参表中是可以有默认值得。
  格式
    返回值类型 函数名(参数=默认值){ }
注意:
1、如果函数形参从某个参数有了默认值,那么从这个位置往后,从左到右都必须有默认值。
2、如果函数声明有了默认参数,函数实现就不能有默认参数。

 

函数占位参数
c++中函数的形参表里可以有展位参数,用来做占位,调用函数时必须填补该位置

格式
        返回类型 函数名(数据类型){ }

1 int test1(int)
2 {
3 4 5 }

 

 


占位参数可以有默认值
    

 

1 int test2(int =10){
2 
3 
4 5 
6 }

 

函数重载
函数名可以相同

重载满足条件
  1、同一个作用域
  2、函数名称相同
  3、函数参数类型不同或者参数个数不同或则顺序不同
注意:函数的返回值不可以作为函数重载的条件

 

 


函数重载注意事项
1、引用作为重载条件

1 void func (int &a){};
2 void func(const int &a){};
3 int a=10;
4 func (a);//调用第一个函数 void func (int &a)
5 func(10);//调用第二个函数 void func(const int &a)

 



2函数重载遇到函数默认参数

1 void func (int a){}
2 void func (int a,int b=10){}
3 func(10)//这个第一个函数和第二个函数都可调用,发生二义性,要尽量避免。

 

posted @ 2021-02-15 17:01  两天阿来  阅读(48)  评论(0)    收藏  举报