一、温故知新
1、封装
1)封装的简介
封装是C++三大特性之一,防止函数直接访问类的内部成员
2)封装的意义
【1】实现类的属性(变量)与行为(函数)
【2】对属性和行为的权限加以控制(需要使用修饰类成员的关键字)
2、修饰类成员关键字
1)简介
【1】public
类的内部和类的外部都可以访问修改的公有的成员
【2】private
只能在类的内部进行访问和修改,在类的成员函数中访问类的成员变量
【3】protected
同private,但在有继承关系时,两者不同
--------------------------------------------------------------------------
不同之处:
--------------------------------------------------------------------------
3、特殊的成员函数
1)构造函数
用于实例化对象的时候,初始化对象的属性(成员变量),并且在实例化对象的时候自动调用。
构造函数的名称与类的名称是相同的,并没有返回值类型。
如果定义类的时候没有指定构造函数,编译会默认生成一个构造函数。
2)默认构造函数
【1】我们不写,编译器默认生成的构造函数
【2】没有参数的构造函数
【3】全缺省的构造函数
注意:构造函数可以重载,但默认构造函数只能有一个。
3)构造函数的特性
【1】没有返回值
【2】函数名与类名相同
【3】可以重载
【4】在实例化对象的时候自动调用
4)初始化列表
构造函数可以使用初始化列表的方式进行初始化成员变量,其他函数不可以。
5)拷贝构造函数
是把已实例化好的对象将值拷贝给新的实例化对象。
m_len = v.m_len // 浅拷贝:只是拷贝数值
m_a = new int [m_len]; // 深拷贝:涉及到了类中存在指针,并存在动态开辟空间
memcpy(m_a, v.m_a, sizeof(int) * m_len);
6)析构函数
类的析构函数会在每次删除所创建的对象时自动执行。
主要目的是来释放空间。
析构函数不可以重载,在没有实现析构函数时,编译器也会生成默认析构函数。
4、this指针
类的成员函数都有一个默认的参数是指向当前对象的this指针。
二、友元和静态成员
1、static
C语言:
【1】修饰局部变量(成为静态局部变量)
(1)static关键字修饰局部变量不改变作用域,但是生命周期变长。
(2)本质上,static关键字修饰局部变量,改变了局部变量的存储位置,因为存储位置的差异,使得执行效果不一样。普通的局部变量放在栈区,这种局部变量进入作用域创建,出作用域释放。局部变量被static修饰后成为静态局部变量,这种变量放在静态区,创建好后,直到程序结束后才释放。
(3)static的另一个作用是默认初始化为0。其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有元素都置0,然