需要一些帮助了解私人 /保护 /公共继承
Need some help understanding private / protected / public inheritance
当前,我正在学习OOP,并且我尝试了许多继承示例。我刚刚测试了此代码:
#include <iostream>
using namespace std;
class B
{
int a;
protected:
B(int i=0)
{
a=i;
}
int get_b()
{
return a;
}
};
class D: private B
{
public:
D(int x=0): B(x) {}
int get_a()
{
return get_b();
}
};
int main()
{
D d(-89);
cout << d.get_a();
return 0;
}
为什么这起作用?为什么可以使用get_b()
函数?为什么构造函数B(x)
工作?如果我将protected
更改为private
,为什么不起作用?
以后的编辑:通过在构造函数和函数函数上使用protected
关键字get_b()
表示,如果继承是公共的,则派生的类具有加速性。但是,在这种情况下,通过使用私有继承,我希望构造函数和 get_b()
函数与D
类不可接受。
为什么可以使用get_b((函数?
因为get_b()
是protected
,可以通过派生类使用。
为什么构造函数b(x(起作用?
同样的原因,它是protected
,在这种情况下是通过派生类D
访问的。
如果我更改为私有保护,为什么不起作用?
因为private
成员仅通过类本身访问(在这种情况下为B
(,并且它的朋友,D
无法访问private
B
成员。
后来的编辑:通过在constructor和function get_b((上使用受保护的关键字,表示派生的类具有的act ,如果继承是public 。
您的声明中的粗体部分是不正确的。继承指定符表示,B
成员将如何在D
类的儿童和用户中访问,它不会将D
类方法的访问更改为B
的成员。
但是,在这种情况下,通过使用私有继承,我希望构造函数和get_b((函数与
D
类不可能。
您的期望是错误的。私有继承将使B
类的成员无法访问B
的儿童和D
类的用户,并且不影响CC_25成员的可访问性。
实际上,公共,受保护和私人 sashitance 指定将适用于继承成员的最自由的访问控制。我的意思是:
公共
class Pub : public B
Pub
继承的B
的公共成员将在Pub
本身和外部(以及从Pub
派生的任何类(中访问。Pub
继承的B
的受保护成员将在Pub
中和从Pub
派生的类中访问。B
的私人成员将无法在Pub
中访问。
提出它的另一种方法:B
的公共成员仍然公开,受保护的成员仍然受到保护,私人成员无法访问。
受保护
class Prot : protected B
Prot
继承的B
的公共成员和受保护的成员将像Prot
的受保护成员一样,在类本身和从其派生的类中,但不是从外部衍生出来的。B
仍然无法使用Prot
的私人成员。
提出它的另一种方法:B
的公共成员受到保护,受保护的成员仍然受到保护,私人成员无法访问。
私人
class Priv : private B
Priv
继承的B
的公共和受保护成员仅适用于Priv
,而不可用于任何派生类(就像Priv
的私人成员一样访问它们(。B
的私人成员仍然无法使用Prot
。
提出它的另一种方法:B
的公开和受保护的成员成为私人,私人成员无法访问。
私有/procected/public Sentaritance都是关于决定谁知道继承的。在公共继承中,所有外部代码都意识到这一点。在受保护的继承中,只有孩子们知道。在私有情况下,只有继承类才知道。最重要的是,相同的关键字适用于成员,但不受继承可见性的影响。如果班级意识到继承,则可以像往常一样可见成员。如果它不了解继承,它甚至不了解成员,无论是公共,私人或受保护的成员。
要回答您的特定问题,如果您创建了E类继承(公开(D类D,您将无法致电get_b
,但您仍然可以致电get_a
- 为什么在保护模式下继承升级不起作用
- 继承和友元函数,从基类访问受保护的成员
- 所以我正在为我的学校作业练习继承,但我无法正确实施标题保护
- 为什么继承的受保护构造函数不能公开?
- 在使用受保护和继承时无法访问在类中声明的私有成员
- 继承期间受保护成员的皮条
- 在 lambda 函数 g++-4.8 中调用继承的受保护子类型
- 在派生类中具有相同签名但继承为受保护的函数
- 为什么我无法使用受保护/私有继承访问派生实例中基类的受保护成员?
- 使从一个基类派生的类能够使用继承的受保护成员
- 需要一些帮助了解私人 /保护 /公共继承
- 为什么继承的受保护操作员=()有公共访问权限
- C :可以从类及其受保护的成员类型继承可以继承吗?
- C++对已继承的受保护类成员的未定义引用
- 如何访问多个继承类中的受保护成员
- 用受保护的继承指向基类方法
- C 继承访问受保护的数据成员
- 在 std:: 容器中使用受保护继承的原因
- 具有多态性的多重受保护继承
- 带虚函数的受保护继承