C++ is-a, was-a, has-a,holds-a

来源:互联网 发布:剑三捏脸正太数据 编辑:程序博客网 时间:2024/06/10 09:30

C++ is-a was-a has-a holds-a


flyfish 2015-1-28


is-a :公有继承(public inheritance)一般称为两个对象是之间是 is-a 关系

was-a: 私有继承称两个对象是 was-a 关系

has-a:has-a关系描述一个类中有另一个类型的实例

holds-a:描述的是一个类中保存了指向另一个类型的指针或者引用


is-a :Liskov替换原则(Liskov Substitution Principle)对is-a 做出了更具有限制性的定义

子类对象能够替换其基类对象被使用。适用于base classes身上的每一件事情一定也适用于derived classes身上,

因为每一个derived class对象也都是一个base class对象。


其中is-a和was-a是继承关系。has-a和holds-a 是组合关系.

尽量使用组合关系的原因

继承使设计的耦合度过于紧密,当一个类继承另一个类时,不管什么样的权限继承,子类都可以获得基类所有的public和protected成员的访问权限

使用组合时该类仅仅与其他类的public成员耦合。

当使用holds-a关系时 不需要引用其他类的头文件只需要使用 前置声明(forward declaration)。


0 0