1、实现一个不能被继承的类
将构造函数私有化或者利用c++11新关键字fininal禁止继承
class NonInherit
{
public:
//这样派生类没有办法调用基类的构造函数,因此无法继承
static NonInherit GetInstance()
{
return NonInherit();
}
private:
NonInherit()//构造函数私有
{}
};
// C++11给出了新的关键字final禁止继承
class NonInherit final
{};
2、继承和组合
(1)继承
class A{};
class B:public A
{};
(2)组合
class C{}
class D
{
C c;
}
- 组合和继承都完成了类层次的复用,继承是一种白箱复用,父类对子类基本是透明的,一定程度上破坏了类的封装;
组合是一种黑箱复用,C对D是不透明的,C保持着他的封装
- 比较之下:
组合的类耦合度更低
继承的类是一种高耦合(父类的改变很大程度上影响着子类)
尽量使用组合而不是继承- 符合has-a使用组合,符合is-a使用继承