假设我有一个类engin,我从engin类继承了一个类汽车
class engin
{
    public:
        engin(int nobofcylinders);
        void start();
};
class car:private engin
{
    public:
        car():e(8){}
        void start()
        {
            e.start();
        }
    private:
        engin e;
};
现在同样可以通过组合来完成,问题是哪个approch最好,主要用于编程,以及为什么???????
如果要将私有继承与组合进行比较,请阅读http://www.parashift.com/c++-faq-lite/private-inheritance.html#faq-24.3.我不认为私人继承是好的.
一个Car 有一个 Engine,但是一个Car 不是一个 Engine,所以最好用作文来完成.
继承对"is-a"关系很有用,例如a Bus -a Car,a Car is-a vehicle等.
组合对于"has-a"关系很有用,例如Car has Wheel -s,Car has-an Engine等.
所以逻辑代码应该是这样的
class Car : public Vehicle {
    Engine engine;
    Wheel  wheels[4];
    ...
};
我更喜欢将继承视为derived is a kind of base,这基本上意味着公共继承。在私有继承的情况下,它更像是derived has a base,恕我直言听起来不正确,因为恕我直言,这是组合的工作,而不是任何类型的继承。那么,既然私有继承和组合在逻辑上本质上是相同的,那么选择哪个呢?有了你发布的例子,我肯定会去作曲。为什么?我倾向于将各种继承视为一种kind of关系,就您发布的示例而言,我想不出我可以说的情况a car is kind of an engine,它根本不是。确实很像a car has an engine,那么为什么汽车会继承发动机呢?我看不出任何原因。
现在,确实在某些情况下,私有继承是好的,即boost::noncopyable,由于它的 ctor/dtor 受到保护,您将很难实例化它,而且实际上,由于我们希望我们的类能够have a noncopyable part,这是唯一的出路。
一些风格指南(例如google c++ 风格指南)甚至建议永远不要使用私有继承,原因与我已经写过的类似 - 私有继承有点令人困惑。