类与类之间的关系
关系:在一个类中使用另一个类作为成员 或者 两个类间进行同信,注意:关系是两个类的
类于类之间的关系分为纵向的与横向的
- 纵向的有——继承
- 横向的有——组合(A isapart B),聚合(A use a B) , 依赖( A use B) ,关联( A has B)
依赖关联:没有生命周期的关系
组合聚合:有生命周期的关系
关系强弱 依赖 < 关联 < 聚合 < 组合
组合
组合:是一种整体与部分的关系,是有生命周期关系的
组合关系表现为整体同过数据成员定义对象,调用的方式体现
依赖
依赖: 在方法成员中要实现某种功能,需要使用客观不属于自己的对象时
依赖关系表现为被依赖的对象以参数的形式传入主类的方法
关联
关联:主类长期在数据成员中持有主类的指针或者说是引用
关联关系表现为主类同过指针的形式在堆区空间长期持有另一个类的对象
聚合
聚合:是一种一对多的所属关系,管理一个类所定义的所有对象
聚合关系通过过指针数组体现
继承 A is B
语法 :class 类名 :访问修饰符 父类名
基类(父类)
派生类(子类)
继承的优点 可以提高代码的复用性
在继承中会出现同名的数据,可以同过作用域调用的方式区分
继承方式
- public: 父类中的public protected 在子类中不变,private变量不可被继承
- protected : public 在子类中变为受保护, protected 在子类类中与父类一致 , private变量不可被继承
- private: public 变为私有的 , protected 变为私有的 , private 变量不可继承
继承中的构造与析构
- 构造函数先执行构造列表在执行 {} 内的,继承时CSon():Cfathrer() 默认存在
- 多继承是先继承先初始化,构造函数中先执行父类的构造函数,析构先执行子类的析构函数
- 组合关系和继承关系要使用指定的构造函数要写在参数列表里
- 父类的构造函数时子类构造函数的第一个成员
继承中函数的重载,从写与隐藏
- 父类与子类不存存在重载,但是可以隐藏父类的函数,当函数返回值,函数名参数一致时可以重写
类中函数的使用
- 父类指针可以指向子类对象,但是只能使用父类中含有的成员
- 父类指针可以提高代码的复用性,确定只能使用父类函数(可以利用多态性解决)
- 可以使用函数指针解决(多态原理)
函数指针
- 普通函数指针可以访问类中静态成员函数
- 成员函数指针---->类成员
void (CPreson::*pfn2)(int);
pfn2 = &CPreson::AA();
// 调用
CPerson ps;
ps.*pfn2(123);
// 这里使用了新的操作符 ::* ->* ,*
// 调用 对象.* ->*