我使用private继承了一个构造函数,为什么我仍然可以从主函数访问它
I Inherited a constructor using private, Why am I still be able to access it from main function?
#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;
}
对于上面的代码,为什么我得到的输出"基本构造函数派生构造函数"即使我继承了使用private?
为什么我仍然可以从主功能访问它?
你不是。
您的主函数访问derived
的构造函数,它可以访问该构造函数。
并且derived
的构造函数访问base
的构造函数,它可以访问该构造函数。
构造函数在执行构造函数主体之前自动初始化基类和成员。私人继承并不能改变这一点。它只是使类的基本部分在类之外不可访问。由于是派生类构造函数调用基类构造函数,所以私有继承不会限制它的功能
您的意思是生成基类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
}
还有一种流行的模式是使析构函数受到保护。不过你明白了。
相关文章:
- 为什么示例代码访问IUnknown中已删除的内存
- 为什么此派生对象无法访问基类的后递减方法?
- 为什么我的好友类无法访问私人会员?
- 为什么 std::itrator 无法访问该函数
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- C++:为什么无法在派生类中访问受保护的构造函数?
- 为什么即使我声明了朋友类,我也会收到错误"无法访问类中声明的私人成员"
- 为什么 Windows 拒绝访问某些进程的名称?
- 为什么我在空指针错误(链表)中获取成员访问权限
- 为什么在访问 vtkRenderWindow 的"交互器"变量时会发生段错误?
- 为什么我无法访问指向数组中成员函数的指针?
- 当键值是 std 向量时,为什么使用 at in C++ 访问映射值如此缓慢?
- 为什么访问模板化变体作为返回值抛出异常
- 为什么访问我的引用捕获变量会导致我的 lambda 函数出现段错误?
- C++ 为什么访问数组中的元素会返回指针?
- 为什么访问器函数必须是常量?漏洞在哪里?
- 为什么访问冲突异常不能被 捕获.NET4.0.
- 为什么访问非托管内存会导致System.AccessViolationException
- 为什么访问未初始化的指针不显示错误?
- 为什么访问此局部成员变量会导致异常