#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;
}
对于上面的代码,为什么我得到输出为 “基础构造函数派生构造函数” 即使我继承私人使用?
答案 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
}
一种有点流行的模式也是为了保护析构函数。不过,你明白了。