继承和组合
- public继承是一种 is-a 的关系,组合是一种 has-a 的关系;
- 一般优先使用对象组合,而不是类继承;
- 继承允许根据基类的实现来定义派生类的实现,在继承方式中,基类的内部细节对子类可见。继承一定程度上破坏了基类的封装,基类的改变,对派生类有很大的影响,派生类与基类的依赖关系很强,耦合度很高;
- 对象组合是类继承之外的一种复用选择。对象内部是不可见的,组合类之间没有很强的依赖关系,耦合度低,代码维护性好。
class Car
{
protected:
string _color = "white";
string _num = "陕AB5678";
};
class BMW : public Car
{
public:
void Drive()
{
cout << "好开-操控" << endl;
}
};
class Benz : public Car
{
public:
void Drive()
{
cout << "好坐-舒适" << endl;
}
};
class Tire
{
protected:
string _brand = "Michelin";
size_t _size = 17;
};
class Car
{
protected:
string _color = "white";
string _num = "陕AB5678";
Tire _t;
};