case 1:
class ObjectCount {
private:
ObjectCount(){}
};
class Employee : private ObjectCount {};
案例2:
class ObjectCount {
public:
ObjectCount(){}
};
class Employee : private ObjectCount {};
In case1: ObjectCount构造函数是私有的,继承也是私有的。它给出了编译错误
In case2: ObjectCount构造函数是公共的,继承是私有的。这个代码没问题。
谁能解释一下这是怎么发生的?在第一种情况下,Employee
C'tor不能调用它的父(ObjectCount
) C'tor,因为它是私有的。
在第二种情况下,Employee
C'tor调用父对象的tor没有问题,因为它是公共的。
注意这一点很重要,因为每个类在激活自己的构造函数之前都必须使用它的父类构造函数。
私有继承意味着其他类不能使用[或看到]Employee
作为ObjectCount
,它不改变ObjectCount
的c'tor的可见性,它必须在任何情况下被派生类访问。
首先要理解什么是PRIVATE INHERITANCE:
私有继承是实现has-a关系的一种方式。使用私有继承,基类的公共和受保护成员成为派生类的私有成员。这意味着基类的方法不会成为派生对象的公共接口。但是,它们可以在派生类的成员函数中使用。
私有构造函数只能从同一个类内部访问。它不能从外部访问,甚至不能被派生类访问。
这是因为当基类构造函数定义为'private'时,派生类无法访问任何基类构造函数,因此派生类无法调用任何基类构造函数。在第二种情况下,公共方法(在这种情况下是构造函数)是继承的,所以没有问题。