解决继承测验的问题

|                                                                                                                       
已邀请:
以下代码提供了一种测试作业问题中的继承规则的方法。
#define inherit_A  public     A
#define inherit_B  private    B
#define inherit_C  private    C

class A {
public:    int    public_a;
protected: int    protected_a;
private:   int    private_a;
};

class B : inherit_A {
public:    int    public_b;
protected: int    protected_b;
private:   int    private_b;
};

class C : inherit_B {
};

class D : inherit_C {
public:
    void test_inheritance_visibility()
    {
        int foo;
        foo = public_a;
        foo = protected_a;
        foo = private_a;
        foo = public_b;
        foo = protected_b;
        foo = private_b;
    }
};
将上面的代码剪切并粘贴到一个名为
test.cpp
的文件中,然后尝试对其进行编译。编译器报告的错误消息将指示表中一行的继承可见性规则。然后在文件开头更改ѭ2并重新编译以检查表的另一行。 当我这样做时(在Linux上使用g ++编译器),编译器错误表明您对于表的第二行不正确,但对于表的倒数第二行是正确的。 我并不是声称要了解这些测试结果。特别是,我认为您对表中的这两行都是正确的(我不打扰检查没有红色标记的行)。我对艾尔斯(Als)的答案的阅读还表明,您应该正确对待带有红色标记的这两行。 无论如何,至少您现在有了一些简单的代码,可以带给您的老师,以使您能够更深入地讨论继承的可视性。     
让我们反向滚动: 首先,Z是多少并不重要。如果您的D继承自类C,则
public
private
protected
都无所谓,D获得完整的接口。只有D的“子代”才需要担心。 就后代的可访问性而言,ѭ3really和
protected
成员之间并没有真正的区别。
private
的部分与人类一样,是私有的,不是界面的一部分,仅对close9ѭ非常感兴趣,并且永远不要与后代分享! 对于B类在D中的可访问性,只有Y很有趣: C:Y B Y告诉您C的后代得到:私有:什么,保护:完整的接口,公共:完整的接口。 这解决了第3行中的问题。 第七行有点奇怪,因为它似乎是完全正确的。您确定这些十字架不属于那里吗? 要访问D中的A \,X和Y必须是允许的(受保护或公共)。     
访问说明符和继承规则可以简单总结如下: 在公共继承中:
Base
的全部
Public members
变成
Derived class
Public members
Base
的全部
Protected members
变成
Derived class
Protected members
在保护继承中:
Base Class
的全部
Public & Protected members
变成
Derived class
Protected members
。 在私有继承中:
Base Class
的全部
public & protected members
变成
Derived Class
Private members
Base class
中的
Private Members
被继承,而but25ѭ中的
never accessible
被继承。 您可能需要参考先前的答案,以示例的方式解释上述概念。 至于您要提出的特定问题的答案,问题本身并不十分清楚,因此无法明确回答。如果您可以进一步澄清问题,我们可以回答问题,或者如果您能够理解所提到的概念和链接,那么我相信您将能够自己解决问题。     

要回复问题请先登录注册