我继承了一个使用private的构造函数,为什么我仍然可以从main函数访问它?

时间:2013-02-23 16:45:14

标签: c++ oop object

#include <iostream>
using namespace std;

class base{
public:
    int i;
    base(){
    i=1;
    cout<<"Base Constructor";
    }
};

class derived: private base{
    public:
    derived(){
    i=2;
    cout<<"Derived constructor";
    }
};


int main(){ 
derived c;
return 0;
}

对于上面的代码,为什么我得到输出为 “基础构造函数派生构造函数” 即使我继承私人使用?

3 个答案:

答案 0 :(得分:3)

  

为什么我仍然可以从main函数访问它?

你不是。

你的main函数访问它有权访问的derived构造函数。

derived的构造函数访问base的构造函数,可以访问。

答案 1 :(得分:1)

构造函数在执行构造函数体之前自动初始化基类和成员。私有继承不会改变这一点。它只是使类的基础部分无法在类外访问。由于它是调用基类构造函数的派生类构造函数,因此私有继承不限制它可以执行的操作。

答案 2 :(得分:0)

你要做的是创建基类protected的构造函数。然后只有派生类可以使用它:

class base
{
protected:
    base() : i(1) { }
private:
    int i;
};

class derived : private base
{
public:
    derived() : base() { }
};

int main()
{ 
    // base b;  // error: inaccessible constructor base::base()
    derived d;  // fine
}

一种有点流行的模式也是为了保护析构函数。不过,你明白了。