c++学习笔记

1.内存分区模型
C++程序在执行时,将内存大方向划分为4个区域

代码区:存放函数体的二进制代码,由操作系统进行管理的
全局区:存放全局变量和静态变量以及常量
栈区:由编译器自动分配释放,存放函数的参数值,局部变量
堆区:由程序员分配和释放,若程序不释放,程序结束时由操作系统回收

程序运行前
在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域

代码区:
存放CPU执行的机器指令
代码是共享 只读
全局区:
全局变量和静态变量存放在此 ,全局区还包含常量区,字符串区和其他常量区
该区域的数据在程序结束后由操作系统释放

栈区:
不要返回局部变量地址

堆区在C++用new开辟数据 返回的是地址 void *func()
new int(10)

C++引用
数据类型 &别名=原名

引用注意事项
引用必须初始化
引用在初始化后,不可以改变

引用做函数参数

作用: 函数传参时,可以利用引用的技术让形参修饰实参
优点:可以简化指针修饰实参
mySwap01(a,b);
void mySwap01(int &a,int &b) 引用本质是起别名 ,对同一块地址进行修改

引用做函数返回值
作用:引用是可以作为函数的返回值存在的
注意:不用返回局部变量引用
用法:函数调用作为左值
ref2是a的别名

引用的本质
本质:引用的本质在c++内部实现是一个指针变量
引用一旦初始化后,就不可以发生改变

常量引用:
作用:常量引用主要用来修饰形参,防止误操作

在函数列表中,可以加const修饰形参,防止形参改变实参

2.函数提高
2.1函数默认参数
在C++中,函数的形参列表中的形参是可以有默认值的
语法:返回值类型 函数名 (参数=默认值){}
如果我们自己传入数据,就用自己的数据,如果没有,那么用默认值
语法:返回值类型 函数名(形参=默认值)

//注意事项
1.如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认值
2.如果函数声明有默认参数,那么函数实现就不能有默认参数

2.2函数占位参数
C++中函数的形参列表里可以有占位参数,用来占位置,调用函数时必须填补该位置
如 viod func(int a,int)//目前阶段的占位参数,我们还用不到,后面课程中会用到
占位参数,还可以有默认参数

2.3 函数重载
作用:函数名可以相同,提高复用性

函数重载满足条件:
同一个作用域下 全局域
函数名次相同
函数参数类型不同,或者个数不同或者顺序不同

注意:函数的返回值不可以作为函数重载的条件
2.3.2 函数重载注意事项
引用作为重载条件
函数重载碰到函数默认参数

3.类和对象
C++面向对象的三大特性:封装,继承,多态
C++认为万事万物皆为对象,对象上有其属性和行为
4.1.1 封装的意义
封装是C++面向对象三大特性之一
封装的意义:
将属性和行为作为一个整体,表现生活中的事物
将属性和行为加以权限控制

封装意义-:
在设计类的时候,属性和行为写在一起

class 代表设计一个类,类后面紧跟着的就是类名称
//访问权限
属性
行为
实例化(通过一个类 创建一个对象的过程)

封装意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制

访问权限有三种:

1.pblic 公共权限 // 成员 类内可以访问 类外可以访问
2.protected 保护权限 成员 类内可以访问,类外不可以访问 儿子可以访问父亲中的保护内容
3.private 私有权限 成员 类内可以访问,类外不可以访问 儿子不可以访问的私有内容

  4.1.2 struct和class区别


 在C++中struct和class唯一的区别就在于默认的访问权限不同

区别:
struct 默认权限为公共
class默认权限为私有 类外不可以访问

 4.1.3 成员属性设置为私有
  优点:将所有成员属性设置为私有,可以自己控制读写权限
  优点2:对于写权限,我们可以检测数据的有效性


  4.2 对象的初始化和清理
    对象必须初始化 使用完之后必须及时清理
 4.2.1构造函数和析构函数

构造函数:主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用
析构函数:主要作用:对象销毁前系统自动调用,执行一些清理工资

构造函数语法:类名(){}
没有返回值也不写void
函数名次与类名相同
构造函数可以有参数,因此可以发生重载
程序在调用对象时,会自动调用构造,无须手动调用,而且只会调用一次

析构函数语法:~类名(){}
没有返回值也不写void
函数名次与类名相同
构造函数不可以有参数,因此不可以发生重载
程序在调用对象时,会自动调用构造,无须手动调用,而且只会调用一次
//对象的初始化和清理

构造函数 进行初始化操作
析构函数 进行清理操作

构造函数的分类及调用

两张分类方式:
按参数分为:有参构造和无参构造
按类型分为:普通构造和拷贝构造Person(const Person &p)
调用默认构造函数时候,不要加()
三种调用方式:
括号法
显示法
Person p1;
Person p2=Person(10);
Person p3=Person(p2);
隐式转换法
Person p4=10;//相当于写了 Person p4=Person(10);//有参构造
Person p5=p4;

Person(10);//匿名对象 特点:当前行执行结束后,系统会立即回收匿名对象
不要利用拷贝构造函数,初始化匿名对象

4.2.3拷贝构造函数调用时机
C++中拷贝构造函数调用时机通常有三种情况
使用一个已经创建完毕的对象来初始化一个新对象
值传递的方式给函数参数传值
以值方式返回局部对象

4.2.4 构造函数调用规则
默认情况下,C++编译器至少给一个类添加3个函数
1.默认构造函数(无参,函数体为空)
2.默认析构函数(无参,函数体为空) 几个类释放 输出几个析构函数
3.默认拷贝构造函数(对属性进行值拷贝)

如果我们写了有参构造函数,编译器就不再提供默认构造,依旧提供拷贝构造

如果我们写了拷贝,编译器就不提供其他普通函数

4.2.5 深拷贝与浅拷贝

浅拷贝:简单的赋值拷贝操作
深拷贝:在堆区重新申请空间,进行拷贝操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱技术的小曹

你的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值