c++入门学习二

5.20

  1. 内联函数解决宏函数的缺陷问题
1.1存在一定的缺陷,所以c++设计了内联函数:inline void func(int a){ };内联函数用空间换时间。
给编译器一个建议,加上关键字,编译器不一定按照内联处理
1.2不加关键字,也许编译器还偷摸的给你加 inline
1.3成员函数 默认加上关键字
  1. 函数的默认参数以及占位参数

2.1void func(int a=10,int b=20) {}:c++中调用的时候如果有输入参数则改变,如果没有输入则用默认参数。
2.2如果有一个位置有了默认值,那么从这个位置开始,从左到右都必须有默认值
2.3函数的声明和实现 只能有一个有默认值。
2.4void func(int a=10,int) {}:int是占位参数,没什么大用,在后面有一点点用。
2.5占位参数调用时必须要提供这个参数
2.6占位参数也可以有默认值
2.7C语言中没有默认参数和占位参数

  1. 函数重载的基本语法

3.1c++中 函数名称可以重复
3.2必须作用在同一个作用域 函数名称相同
3.3函数的 参数个数不同 或者 类型不同 或者 顺序不同,以上情况可以满足函数重载条件
3.4返回值不同类型的函数无法作为重载的条件
3.5当函数重载 碰到了默认参数时,要注意避免二义性问题
3.5.1void func2(int a,int b=10)
3.5.2void func2(int a) ;func2(10);
3.6const 可以作为函数重载的条件

  1. 类和结构体
    c++中struct 和class是一个意思,唯一不同的是类有默认权限,struct是public class默认权限是private
    所谓私有权限就是私有成员(函数 成员)在类的内部可以访问,类外部不可以访问,公共权限,在类的内部外部都可以访问。
    public:类内类外都可以访问
    protected;类内可以访问 类外不可以访问(子类可以访问)
    private:类内可以访问 类外不可以访问(子类不可以访问)

  2. 立方体案例

  3. 点和圆关系案例

6.1圆内的属性有个它自己定义的数据类型 point
6.2三种关系判断
6.3 分文件编写
6.3.1.h中写类的成员函数声明和类的属性
6.3.2.cpp中写成员函数的函数实现

  1. 对象的初始化和清理

7.1构造函数
7.1.1与类名相同,没有返回值,不写void,可以发生重载(可以有参数)
7.2.2构造函数由编译器自动调用,而不是手动,而且只会调用一次
7.2析构函数
7.2.1与类名相同,类名前面加一个符号“~”,也没有返回值,不用写void,不可以有参数(不能发生重载)
7.2.2自动调用,只调用一次
7.3系统会默认调用 构造函数和析构函数,而且只会调用一次
7.4如果程序员没有提供构造和析构,系统会默认提供,空实现

  1. 构造函数的分类及调用

8.1按照参数分类
8.1.1 无参构造(默认构造) 有参构造
8.2按照类型分类
8.2.1 普通构造函数 拷贝构造函数
8.3无参构造写法 和调用
8.3.1 Person p5 ;//注意不能加括号,因为编译器会认为这个是函数声明
8.4 有参构造写法 和调用
8.4.1Person p4 = Person(100)或者Person p1(10);
8.4.2Person(100);//叫匿名对象,匿名对象特定,如果编译器发现了对象是匿名的,那么这行代码结束就释放这个对象

8.5拷贝构造函数

>  8.5.1Person (const Person &p)
> {
> 
> }

8.5.2Person p2(p1);或者Person p5 = Person(p4);//相当与调用拷贝构造函数、
8.5.3 不能用拷贝函数构造初始化匿名对象
8.8.3.1不能单独写 Person(p1) 这种写法等价于person p1
8.5.3.2写到右值可用于拷贝构造函数Person p6=Person(p5);

8.6隐式类型转换
8.6.1 Person p7 = 100;//相当于调用了Person p7=Person(100) 隐式类型转换
8.6.2 Person p8 = p7;//相当于Person p8 = Person(p7)

  1. 拷贝函数构造时机

9.1 .用已经创建好的对象来初始化新的对象
9.2值传递的方式给函数传值
9.3以值的方式返回局部对象
9.3.1 relase模式下会做优化

  1. 构造函数的调用规则
    系统默认给一个类提供 三个函数 默认构造 、拷贝构造、析构函数

10.1.当我们提供了有参构造函数,那么系统不会再给我们默认提供构造函数了,但是系统还会提供拷贝构造函数和析构函数,进行简单的值拷贝
10.2当我们提供了 拷贝构造 ,那么系统不会提供其他的构造了

  1. 深拷贝与浅拷贝

11.1系统默认提供拷贝构造,而且是简单的值拷贝
11.2自己提供拷贝构造,原因是简单的浅拷贝会释放堆空间两次,导致挂掉
11.3解决上述问题,需要我们自己提供拷贝构造函数,进行深拷贝

  1. 初始化 =列表

12.1在构造函数后面+ :属性(值、参数),属性(值、参数)…

  1. 类对象作为成员的案例

13.1当类对象作为类的成员的时候,构造顺序是先构造类对象的构造,然后构造自己,
13.2析构顺序与构造相反

  1. explicit关键字作用

14.1explicit关键字,防止隐式类型转换

  1. new运算符的使用和delete运算符

15.1 Person* p2 = new Person;//所有new出来的对象 都会返回该类型的指针
15.2默认使用构造函数,开辟空间,返回不是void* ,不需要强制转换
15.3 delete 释放
15.4 new对象 用void接受,释放不了对象
15.5 new出来的是数组,如何释放?delete [ ] 数组名
15.6 new 出来的是数组,肯定会调用默认构造
15.7 malloc 返回void* 还要强转
malloc 不会调用构造,new会调用构造
malloc 配合free 用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

li_ao527

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值