2021.11.10
程序中的内存模型:C++在程序运行之前分为全局区和代码区
代码区:存放CPU执行的机器指令,
共享,对于频繁被执行的程序,只需要在内存中有一份代码即可
只读,防止程序意外地修改了指令
全局区:存放全局变量、静态变量、常量(存放const修饰的全局变量、字符串常量),该区域的数据在程序结束后由操作系统释放。
不在全局区中:局部变量、const修饰的局部变量
栈区:由编译器自动分配释放,存放函数的参数值、局部变量等(不要返回局部变量的地址,栈区开辟的数据由编译器自动释放)
堆区:由程序员分配释放,若程序员不释放,程序结束时由操作系统回收,利用new在堆区中开辟内存。如
int * a = new int(10); //10表示整形10 int * arr = new int[10]; //10表示数组有10个元素
若果想释放堆区的数据,利用关键字delete。
delete a; delete []arr;C++中的引用
作用:给变量起别名
语法:数据类型 &别名 = 原名
int a = 10; int &b = a; //引用必须初始化,引用在初始化后不可以改变
1.引用作函数参数
void swap(int &a, int &b) //引用传递,形参会修饰实参,地址传递(指针)也可以
{
int temp = a;
a = b;
b = temp;
}
2.引用做函数返回值
int &a = test(); //不要返回局部变量引用 cout << "a = " << a << endl; test() = 1000 //如果函数的返回值是引用,这个函数调用可以作为左值 cout << "a = " << a << endl;
3.引用的本质:在C++内部实现就是指针常量
int& ref = a; //相当于 int* const ref = &a ;
************************************分割线******************************************************
2021.11.11
函数1.函数的默认参数
如果某个位置参数有默认值,那么这个位置往后,从左向右,必须要有默认值;如果函数声明有默认值,则函数实现的时候就不能有默认参数(二者只有一个有默认参数)。
2.占位参数
返回函数值类型 函数名(数据类型){ }
void func(int a, int) //占位参数还可以有默认值,如 void func(int a ,int = 10)
{}
3.函数重载
满足条件:①同一个作用域;②函数名相同;③函数参数类型不同,或者个数不同,或者顺序不同
void func() { }
void func(int a) { }
void func(int a ,double b) { }
void func(double a , int b) { }
类和对象
1.类的访问权限:
public 公共权限 类内可以访问 类外可以访问
protected 保护权限 类内可以访问 类外不可以访问
private 私有权限 类内可以访问 类外不可以访问
2.class和struct的区别
class默认权限是私有权限,struct默认权限是private
3.成员属性私有化
①可以自己控制读写权限;②对于写权限,我们可以检测数据的有效性。
4.构造函数和析构函数
构造函数语法:类名(){ }
①没有返回值,不写void;②函数名称与类名相同;③构造函数可以有参数,因此可以放声重载;④程序在调用对象的时候会自动调用构造,无需手动调用,而且只会调用一次。
析构函数语法:~类名(){ }
①没有返回值,不写void;②函数名称和类名相同,因此在名称前加上符号~;③析构函数不可以有参数,因此不能发生重载;④程序在对象销毁前会自动调用析构函数,无需手动,只调用一次。



