一. 内存分区模型
-
四个分区
-
代码区:存放函数体二进制代码,由操作系统进行管理
-
全局区:存放全局变量和静态变量以及常量
-
栈区:由编译器自动分配和释放,存放函数参数值,局部变量等
-
堆区:由程序员分配和释放,若程序员不释放,程序结束后由操作系统回收
注意:常量区存放全局常量,和字符串常量
-
-
程序运行前
- 代码区:共享,只读
- 全局区:程序结束后由操作系统释放
-
程序运行后
- 栈区
- 堆区: new开辟的内存
-
new操作符
-
堆区开辟的 数据由程序员手动开辟手动释放,开辟new,释放delete
-
利用new 创建的数据会返回该数据对应的类型的指针
int *arr = new int[10]; //new开辟数组 delete [] arr; //释放
-
二. 引用
-
概念:给变量起别名
语法:数据类型 &别名 = 原名
注意事项:必须初始化,在初始化后不能改变
-
引用作函数参数
- 作用:让形参修饰实参
- 优点:简化指针修改实参
- 值传递
- 地址传递
- 引用传递
-
引用作函数返回值
- 注意:不要返回局部变量引用
- 函数的调用可以作为左值,修改数值
-
引用的本质
本质:指针常量 int * const p = &a; --> int &p=a;
-
常量引用
-
常量引用主要用来修饰形参,防止误操作
-
在函数形参列表中可以加const修饰形参,防止形参改变实参
void func(const int &a); const int &ref = 10; //相当于int temp = 10;const int & ref = temp; //加入const变为只读
三. 函数提高
-
-
函数默认参数
int func(int a,int b=10)
注意:如果函数声明有默认参数,函数就不能有默认参数,声明和实现只能一个有默认参数
-
函数占位参数
int func(int a,int) //写一个数据类型名就行 占位参数可以有默认参数 int func(int a,int = 10)
-
函数重载
- 同一作用域下
- 函数名称相同
- 参数类型不同,个数不同或者顺序不同
- 注意事项:
- 引用作为重载条件
- 重载碰到函数默认参数
四. 类和对象
三大特性:封装,继承,多态
-
封装
- 语法:class 类名{访问权限:属性 /行为};
- 意义:
- 将属性和行为作为一个整体,并加以权限控制
- 权限:
- public 公共 //类内,类外都可访问
- protected 保护 //类内可以访问,类外不可访问 子类可以访问
- private 私有 //类内可以访问,类外不可访问 子类不可访问
- struct 和class的区别:就在于默认的访问权限不同,struct默认公共,class默认私有
- 成员属性设置为私有
- 可控制读写权限
- 对于写权限可检测数据有效性
//一般写成这样 .h文件第一行一般写 #pragma once class Cube { private: int height; int weight; int length; public: void setter(int h,int w,int l); double Area(); double Tiji(); bool isSameByClass(Cube &c); }; void Cube::setter(int h,int w,int l) { height = h; weight = w; length = l; } double Cube::Area() { return 2*height*weight+2*height*length+2*length*weight; } double Cube::Tiji() { return height*weight*length; } bool Cube::isSameByClass(Cube &c) { if (Tiji()==c.Tiji()) { return true; } return false; }
-
对象的初始化和清理
-
构造函数:对象初始化函数
- 语法:类名(){}
- 特点:
- 没有返回值,不写void
- 名称与类名相同
- 可以有参数,可以重载
- 调用对象时自动调用构造,只会调用一次
- 构造函数的分类
- 按参数分: 有参和无参, 默认无参
- 按类型分:普通构造和拷贝构造
- 构造函数的调用:
- 括号法
- 显示法
- 隐式转换法
</
-