概述
1.案例分析-判断点和圆关系
1.1 点类
1.1.1 属性:X坐标、Y坐标
1.1.2 行为:设置圆心、半径和获取圆心、半径
1.2 圆类
1.2.1 属性:半径、圆心、(point点类)
1.2.2 行为: 设置圆心、半径和获取圆心、半径
1.3 用成员函数方式和全局函数方式测试点和圆关系
1.4 亦可以分文件编写:声明(放在.h文件中)和实现(放在.cpp中)分开,不要忘记包含头文件和加作用域。
2.构造函数和析构函数
2.1 构造函数语法
2.1.1 无返回值、无void等类型、函数名与类型相同
2.1.2 有参数、可出现重载
2.1.3 由编译器自动调用且仅调用一次
2.2 析构函数语法
2.2.1 无返回值、无void等类型、函数名与类型相同,名称前加~
2.2.2 无参数、不可出现重载
2.2.3 由编译器自动调用且仅调用一次
3.构造函数的分类以及调用
3.1 分类
3.1.1 按照参数分类:有参构造、无参构造(默认构造)
3.1.2 按照类型分类:普通构造、拷贝构造(形如:类名(const 类名 &a))
3.2 调用方式
3.2.1 默认构造调用例如:Person p;不可写成 Person p(),编译器会认为它是一个函数的声明
3.2.2 括号法:Person p1(10)、Person p2(p1);前者为有参后者为拷贝构造
3.2.3 显示法:Person p1=Person(10)、Person p2=Person(p1)
3.2.3.1 Person(10) 匿名函数对象; 特点:当前行执行完成后系统就会回收
3.2.3.2 Person(p1) 不可以用拷贝构造函数初始化匿名函数对象,原因是因为编译器认为是对象声明
3.2.4 隐式法
3.2.4.1 Person p1=10;相当于编译器隐式将代码转变成Person p1= Person(10)
4.拷贝构造函数的调用时机
4.1 使用一个已创建好的对象来初始化另一个对象
4.2 以值传递的方式 给函数的参数传值
4.2.1 例如:void ew(Person p)
4.3 以值的方式返回局部对象
4.3.1 例如:Person ew1()
5.构造函数的调用规则
5.1 系统会默认给一个类添加至少3个函数:默认构造函数、析构函数、拷贝构造函数(简单的值拷贝)
5.2 如果提供了有参构造函数,系统就不会提供默认的构造函数但依然会提供拷贝构造函数
5.3 如果我们自己提供拷贝构造函数,系统就不会提供其他普通的构造函数
6.深拷贝和浅拷贝
6.1 系统提供拷贝构造函数只会做简单的值拷贝,测试时遇到Person p1("QAa", 18);语句出现无法从类型1传到CONST的问题,因而要必须在形参字符串前加(char*)
改成Person p1((char *)"a", 18);才能运行
6.2 如果类中有属性开辟到堆区,及在释放的时候因为浅拷贝的问题导致堆区内容会重复释放,程序中断停止
6.3 根据上述问题可以利用深拷贝解决
7.初始化列表
7.1 格式:构造函数名称():属性1(值),属性2(值)......
7.2 功能:用于初始化类的属性
8.类对象作为类成员
8.1 当其他类对象作为本类成员,优先构造其他类对象,其次构造自身,析构时相反
9.explicit 关键字
9.1 explicit关键字用途:防止隐式类型转换方式来初始化对象
9.2 放在 构造函数名称前
10.new和delete 操作符
10.1 new和malloc区别
10.1.1 new是一个运算符,malloc是一个库函数
10.1.2 malloc返回值是void* ,new返回的是new出来的对象的指针
10.1.3 malloc 需要判断是否开辟成功,new内部已经做好不需(malloc数据在堆区,判断内存是否分配成功,调用构造函数)
10.1.4 malloc不会调用构造函数,new会调用构造函数
10.1.5 malloc 释放对应的是free,new释放对应的delete
10.2 注意点
10.2.1 不可用void * 接收new出来的对象,因为不能释放
10.3 利用new创建数组
10.3.1 利用new在堆区创建数组时,类中必须有默认构造函数,否则无法创建成功
10.3.2 如果数组是在栈上开辟的,那么可与指定利用哪个构造函数来初始化对象
10.3.3 如果是数组,释放时要在delete后加拍[]
最后
以上就是冷傲仙人掌为你收集整理的C++每日学习笔记DAY3的全部内容,希望文章能够帮你解决C++每日学习笔记DAY3所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复