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