1.静态成员
静态数据成员和静态成员函数是属于类的,不属于类的某个实例,它们在类的所有实例中都是共享的。
在数据成员前加 static ------>静态数据成员
在成员函数前加 static ------>静态成员函数
静态数据成员必须在类外初始化,如果不初始化(不建议),默认为0。
静态成员函数只能访问静态数据成员,不能访问非静态数据成员。
格式:
class 类名
{
static 数据类型 变量名; // 表示该变量时静态数据成员
static 返回值类型 函数名(形参列表) // 表示该变量时静态成员函数
{
}
};数据类型 类名::变量名 = 初始化;
2.继承
类的三大属性:封装、继承、多态
2.1目的
1> 实现代码的复用性
2> 建立多个类(父类与子类)之间的联系
3> 通过继承,实现多态的特点
2.2继承相关概念
保持已有类的特性,在原来的基础上增加新的特性而构造出新类的过程,称为继承/派生。
被继承者称为 父类 / 基类
继承者称为 子类 / 派生类
2.3格式
class 类名:继承方式 类名
{
子类的拓展;
};//继承方式 public 共有继承 protectd保护继承 private私有继承
//一般使用public继承
2.4继承方式
2.5继承中的特殊成员函数
2.6.1 构造函数
基类中的构造函数会被继承到派生类中,先调用基类的构造函数来给派生类从基类中继承下来的数据成员初始化。(先构造父类,再构造子类)
2.6.2 析构函数
父类中的析构函数也会被继承到子类中,子类析构后,再调用父类的析构函数进行释放空间。(先构造的,后析构 后构造的,先析构)
2.6.3 拷贝构造函数
父类中的拷贝构造函数会被继承到子类中,调用父类中的拷贝构造函数来完成对子类从父类继承下来的数据成员初始化工作。
如果涉及到深拷贝,则需要在父类、子类中各自完成深拷贝工作。
2.6.4 拷贝赋值函数
父类中的拷贝赋值函数会被继承到子类中,调用父类中的拷贝赋值函数来完成对子类从父类继承下来的数据成员赋值工作。
如果涉及到深拷贝,则需要在父类、子类中各自完成深拷贝工作。
1> 父类的构造一定赶在子类之前,所以先调用父类的构造函数,再调用子类的构造函数。
2> 父类和子类有同名同类型的函数时,它们既不是重复定义,也不是重载。原因:作用域不同。
3.多继承
3.1概念
一个类由多个类共同派生。
3.2 格式
class 类名:继承方式1 类名1,继承方式2 类名2,继承方式3 类名3,...,继承方式n 类名n
{
子类的拓展;
};