类和对象(1)
c++认为万事万物都皆为对象,对象有其属性和行为(统称为成员),具有相同性质的对象,可以抽象称为类
c++面向对象的三大特性为:封装,继承,多态
一,封装
可以直接在封装的行为里定义函数。
struct和class的区别
struct默认访问权限为公有 ;class默认访问权限为私有
成员属性设置为私有,好处1,可以自己控制读写权限。2,对于写可以验证数据有效性。
对象的初始化和清理
1,构造函数(初始化)和析构函数(清理,(若堆区有内存,对其释放))
构造函数的分类和调用
按有无参数可分为 无参构造(默认构造)和有参构造。
按 类型分类可分为 普通构造和拷贝构造
(不是拷贝构造就是普通构造)
调用
1,括号法。2,显示法。3,隐私转换发。
1括号法
2显示法
3隐式转换法
拷贝构造函数调用时机:1,使用一个已经创建完毕的对象来初始化一个新对象。2,值传递的方式给函数参数传值。3,值方式返回局部对象。
深拷贝与浅拷贝
浅拷贝:利用编译器提供的拷贝构造函数进行的简单的赋值拷贝操作是浅拷贝。浅拷贝带来问题:堆区内存重复释放。(在类中创建一个堆区的数据,利用析构函数对其进行释放,如果用的浅拷贝会将其释放两次,导致程序崩溃。)
深拷贝:自己写一个拷贝构造函数,对堆区数据进行拷贝时重新在堆区开辟空间。
总结:如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题。
初始化列表
或
类对象作为类成员
c++类中的成员可以是另一个类的对象,我们称该成员为对象成员。
当其他类对象作为本类成员,构造时先构造类对象,再构造自身,析构顺序与构造相反。