Mat*_*son 13
这里的人似乎错误了Protected class继承和Protected方法.
FWIW,我从未见过有人使用受保护的类继承,如果我没记错,我认为Stroustrup甚至认为"受保护"级别是c ++中的一个错误.如果你删除了这个保护级别并且只依赖公共和私人,那么你就无法做到这一点.
有一个非常罕见的受保护继承的用例.这是您想要使用协方差的地方:
struct base { 
    virtual ~base() {} 
    virtual base & getBase() = 0;
}; 
struct d1 : private /* protected */ base { 
    virtual base & getBase() { 
        return this; 
    } 
}; 
struct d2 : private /* protected */ d1 {
    virtual d1 & getBase () { 
        return this; 
    } 
}; 
之前的代码片段试图隐藏它的基类,并通过提供"getBase"函数,无论出于何种原因提供基本及其功能的可控可见性.
但是,它会在struct中失败d2,因为d2不知道d1是派生自哪个base.因此,covariance不会奏效.解决这个问题的方法是将它们保护起来,以便继承在d2中可见.
使用此类似的一个类似示例是,当您派生自std::ostream但不希望随机人员写入您的流时.您可以提供getStream返回的虚拟函数std::ostream&.该函数可以为下一个操作做一些流准备.例如,放入某些操纵器.
std::ostream& d2::getStream() {
    this->width(10);
    return *this;
}
logger.getStream() << "we are padded";
| 归档时间: | 
 | 
| 查看次数: | 1927 次 | 
| 最近记录: |