【问题标题】:Protected types in C++ [duplicate]C ++中的受保护类型[重复]
【发布时间】:2011-09-22 21:27:06
【问题描述】:

可能重复:
What are access specifiers? Should I inherit with private, protected or public?

在浏览 Qt API 文档时,我遇到了受保护的类型。 C++ 中的受保护类型是什么?

我找到了an example of protected types mentioned in the QT documentation

【问题讨论】:

  • @Als:这个问题与如何继承的问题没有直接关系,尽管答案也回答了这个问题。
  • @Xeo:是的,自从早上以来,第二次重复同一个 C++-FAQ ;)FAQ 的标题并没有反映出它回答了这个 Q..我知道,因为我回答了另一个 Q。无论如何复制粘贴这里的内容....
  • @Als:如果当前问题标题没有正确反映内容,请编辑它! ;)

标签: c++ qt


【解决方案1】:

C++ 中的类/结构/联合有 3 个access specifiers。这些访问说明符定义了如何访问类的成员。当然,类的任何成员都可以在该类中访问(在同一类的任何成员函数内)。继续讨论访问说明符的类型,它们是:
Public - 声明为 Public 的成员可通过类的对象从类外部访问。
受保护的 - 声明为受保护的成员只能在派生自类的类之外访问。
Private - 这些成员只能从类中访问。不允许外部访问。

源代码示例:

class MyClass
{
    public:
        int a;
    protected:
        int b;
    private:
        int c;
};

int main()
{
    MyClass obj;
    obj.a = 10;     //Allowed
    obj.b = 20;     //Not Allowed, gives compiler error
    obj.c = 30;     //Not Allowed, gives compiler error
}

什么是受保护类型
受保护类型是在受保护访问说明符范围内定义的类型。

【讨论】:

  • 我可以问为什么不赞成投票吗?我问的原因是 C++ 常见问题解答中存在相同的内容,如果有任何不正确的地方,我会纠正它。
  • 在没有例子的情况下,我们只能猜测。但我有点猜测 OP 可能一直在引用受保护的关键字来引用继承。顺便说一句,这不是反对票。我觉得你的回答很好。
  • @Omnifarious:来自链接的 Qt 页面,不完全是 - 尽管两个主题相互融合。
  • @Omnifarious:如果是这种情况,我已经有一个 c++-Faq 答案标记为重复。
  • 我不是反对者,但我想您的回答涵盖了访问说明符,但没有提及受保护的类型
【解决方案2】:

“受保护类型”是受保护的嵌套类型定义和嵌套类以及模板和枚举(即嵌套类型),也就是说,只能在类的成员函数和派生类的成员函数(以及朋友,当然)。

class A
{
    private:
        typedef int Int_Private;
    protected:
        typedef int Int_Protected;
    public:
        typedef int Int_Public; 
    void member() 
    {  
         Int_Private i1; //OK
         Int_Protected i2; //OK    
         Int_Public i3; //OK
    }
};

class B:A
{
    void derived_member()
    {
         Int_Private i1; //ERROR
         Int_Protected i2; //OK    
         Int_Public i3; //OK

    }
};

void someFunction()
{
         A::Int_Private i1; //ERROR
         A::Int_Protected i2; //ERROR    
         A::Int_Public i3; //OK
}

【讨论】:

    【解决方案3】:

    这些类型 - 枚举、类、结构、typedef - 在包含类中定义为protected。在 protected 下的类中定义的东西(与 privatepublic 相比,只能由继承自该类的类访问。

    【讨论】:

      【解决方案4】:

      受保护类型与私有类型几乎相同,但不同之处在于这些类型可以被派生类访问。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-16
        • 2016-09-04
        • 2012-05-26
        • 1970-01-01
        • 1970-01-01
        • 2012-05-26
        • 1970-01-01
        • 2012-09-21
        相关资源
        最近更新 更多