2017-02-23 72 views
-1

这里是我的代码:混乱,当谈到传承范围

class Base{ 
    public: 
    getValue(int a){ 
     x = a; 
    } 
    protected: 
     int x; 
    }; 

class Derived: public Base{ 
public: 
    Derived():Base(){ 
     Value = 0; 
    } 
    void Function(); 
} 

所以我的困惑来自于继承时,你必须设置在派生功能Base功能的范围,在谷歌它说一切在基类中变得公开。如果是这种情况,那么Derived函数中的Base函数中的受保护值是否可以轻松访问?这不是很糟糕吗?

如果是这种情况,那么在派生类中保护来自基类的受保护值没有办法。

+1

*“在谷歌它说,一切都在基类成为公共。” * - 它的错。不要总是相信谷歌,那里有很多C++错误的东西。请参见[私有,公共和受保护的继承之间的区别](http://stackoverflow.com/questions/860339/difference-between-private-public-and- protected-inheritance?rq = 1)。 – WhiZTiM

+0

顺便说一句,它不叫*“范围”*,*“范围”*是关于别的东西。您的主题以[*“会员访问规范*”(http://en.cppreference.com/w/cpp/language/access)为主题) – WhiZTiM

回答

3

公共遗产并不意味着一切都会公开。这意味着从Base公开的内容将在Derived中公开。受保护的数据成员不公开。

如果您使用过保护继承,则Base的公共方法将在Derived中受到保护。如果您使用私有继承,那么Base中的公共和受保护的方法在Derived中将是私有的。

我想你可以说继承封装指示基类的最大可见度,而不是它的绝对可见度。

编辑:其实通过WhiZTiM提供的链接解释它是相当不错:Difference between private, public, and protected inheritance