2017-07-14 106 views
-6

我正在解决一些基本的遗传问题。我遇到了一些我不了解逻辑的东西。如果我从Base类继承派生类作为私有类,我是否可以访问Base类的公共成员。这里是我的代码,与公共,私人和受保护区别

#include <iostream> 

struct Shape 
{ 
    virtual void print() 
    { 
    std::cout << "SHAPE" << std::endl; 
    } 
    virtual ~Shape() {} 
}; 

struct Box : private Shape 
{ 
    virtual void print() 
    { 
    std::cout << "BOX" << std::endl; 
    } 
}; 

int main(int argc, char** argv) 
{ 
    Shape* s = new Box; //illformed ? can't access the public members of the base. 

    s->print(); 

    delete s; 

    return 0; 
} 
+5

问问你的老师,看书 –

+0

你的C++编译器坏了。 gcc 7.1.1正确地发布了一个诊断,并且无法编译代码:'错误:'Shape'是'Box''的一个不可访问的基地 –

+0

所以它的意思是,如果我继承为Private,形状不可访问框。是?类似于我们无法访问课堂外的私人成员。 – Bob11

回答

0

不,你不应该能够访问被继承的私有基类的公共成员,其他私有继承的目的将是毫无意义的。您甚至不应该将类型Box*的指针分配给类型为Shape*的变量。如果你的编译器处理代码,并且二进制打印出“SHAPE”而不是“BOX”,那么你的编译器确实会被破坏。

+0

奥克。我现在明白了。非常感谢@Murphy的解释。这是有道理的,是的。 – Bob11