类之间的两种关系

  • 继承:“是”关系
    • 基类AB是基类A的派生类 ==> “一个B对象也是一个A对象”
  • 复合:“有”关系
    • C中“有”成员变量k,k是类D的对象,则CD是复合关系 ==> CD这个对象
    • D对象是C对象的固有属性或组成部分
  • 判断和使用的时候,问自己!是不是,有没有。

    复合关系实例

    需要一个“业主”类,还需要写一个“狗”类

    • 狗是有“主人”的,主人是业主

      错误示范一

      1. class CDog; // 必须实现声明
      2. class CMaster {
      3. CDog dogs[10];
      4. };
      5. class CDog {
      6. CMaster m;
      7. };
  • 循环定义!体积怎么算?编译不过!

    错误示范二

    1. class CDog;
    2. calss CMaster {
    3. CDog * dogs[10];
    4. };
    5. class CDog {
    6. CMaster m;
    7. };
  • 改变一条狗的主人的信息,并不能改变其他狗的主人的信息!

    半错示范

    1. class CMaster;
    2. class CDog {
    3. CMaster * pm;
    4. };
    5. class CMaster {
    6. CDog dogs[10];
    7. };
  1. 逻辑说不通,狗并不是主人的固有属性
  2. 狗失去了“狗格”,只能通过主人修改狗的属性

    正确示例

    1. class CMaster;
    2. class CDog {
    3. CMaster * pm;
    4. };
    5. class CMaster {
    6. CDog * dogs[10];
    7. };