当前位置:  开发笔记 > 编程语言 > 正文

有没有我们需要*C++中的受保护继承的例子?

如何解决《有没有我们需要*C++中的受保护继承的例子?》经验,为你挑选了2个好方法。

虽然我已经看到需要私有继承的罕见情况,但我从未遇到过需要保护继承的情况.有人有例子吗?



1> Mats Fredrik..:

这里的人似乎错误了Protected class继承和Protected方法.

FWIW,我从未见过有人使用受保护的类继承,如果我没记错,我认为Stroustrup甚至认为"受保护"级别是c ++中的一个错误.如果你删除了这个保护级别并且只依赖公共和私人,那么你就无法做到这一点.



2> Johannes Sch..:

有一个非常罕见的受保护继承的用例.这是您想要使用协方差的地方:

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";

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有