具有私有构造函数的类的私有继承的工作机制

时间:2011-08-26 09:01:40

标签: c++

案例1:

class ObjectCount {
private:
    ObjectCount(){}
};

class Employee : private ObjectCount {};

案例2:

class ObjectCount {
public:
    ObjectCount(){}
};

class Employee : private ObjectCount {};

在case1中:ObjectCount构造函数是私有的,继承是私有的。它给出了编译器错误

在case2中:ObjectCount构造函数是public,继承是private。这段代码还可以。

任何人都可以解释它是如何发生的吗?

3 个答案:

答案 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”时,派生类无法访问任何基本构造函数,因此派生类无法调用任何基类构造函数。在第二种情况下,公共方法(在这种情况下是构造函数)是继承的,因此没有问题。