1
#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;
}

对于上面的代码,即使我使用私有继承,为什么我得到的输出为“Base ConstructorDerived Constructor”?

4

3 回答 3

3

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

你不是。

您的 main 函数访问derived它可以访问的构造函数。

Andderived的构造函数访问base可以访问的构造函数。

于 2013-02-23T16:54:54.587 回答
1

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

于 2013-02-23T16:49:08.330 回答
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
}

一种比较流行的模式也是使析构函数受到保护。不过,你明白了。

于 2013-02-23T16:50:46.030 回答