当我们要私有继承基类时,为什么要进行名称公开?

巴拉德瓦吉·加利(Bharadwaj Gali)

通常,我们希望使用私有继承将实现细节隐藏到基类中。如果这是真的,

1)为什么会再次出现名称发布功能?仅仅是为了语言完整性还是有实际用途?

2)即使我公开了基类函数的名称,派生类仍然可以声明另一个具有相同名称的函数。请考虑以下代码。

#include "iostream"
using namespace std;

class Base {
  public:
    int zoo;
    Base() {zoo =5;}
    int sleep() const {return 3;}
};

class Derived : Base { // Private inheritance
  public:
    using Base::zoo;
    using Base::sleep;
    int sleep() const { return 4.0; }
};

int main() {
    Derived der;
    der.sleep();
    cout<<" zoo is : "<<der.zoo<<endl;
    cout<<" Sleep is : "<<der.sleep()<<endl;
 }

在上面的代码片段中,即使我们公开了名称,我们仍然可以在派生类中声明该名称,并且可以访问成员变量的基类版本。如何管理内存?

谢谢你。

Xaxxon

http://en.cppreference.com/w/cpp/language/using_declaration

如果派生类已经具有具有相同名称,参数列表和限定的成员,则派生类成员将隐藏或覆盖(不与)从基类引入的成员。

该链接具有特定示例,这些示例精确地说明了您正在做的事情,再次重申了我在上面引用的内容,以及派生成员只是简单地隐藏了基本成员。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我们要降低扩展类中某个属性的可见性?

春季:为什么我们要自动装配接口而不是实现的类?

为什么我们需要将Object类作为所有类的基类?

为什么我们不能将顶级类定义为私有类?

当我们有包装器类时,为什么要支持原语?

为什么我们不能用私有扩展类方法覆盖基类方法?

我们为什么要复制然后移动?

当我们有访问器和更改器时,为什么要声明私有字段?

当我有一个私有id字段时,为什么Hibernate要求我们实现equals / hashcode方法?

当我们创建继承的类的新对象时,是否创建了基类的对象?

为什么我们要批量处理矩阵产品?

如果我们有PL / SQL语言,为什么要odi

当我们不知道要单击什么时如何获取硒中的clicked元素

为什么我们要完成可观察的?

当我没有在原始类型定义中定义类型类约束时,为什么要添加它?

当我们拥有currentThread()方法时,为什么Thread类具有静态方法?

当我们可以通过&运算符传递变量的地址时,为什么要通过指针传递?

当我根本不能将其放在头文件中时,为什么要声明一个“私有”函数为静态?

当我们为一个类的对象分配一个整数值时,为什么要调用参数化构造函数?

当我们在方法类中拥有私有属性时,为什么要使用final作为修饰符

为什么我们要多次擦拭磁盘?

当我们已经有了“ apt-get”时,为什么要制作“ apt”?

我们为什么要守护进程?

如果我们使用netem进行网络延迟,为什么要下载较小的文件

当我们在SOLR中输入搜索词附件时,与复数词附件相比,获得的结果要少。我们缺少什么?

当我们有一个红色区域时,为什么我们需要堆栈分配?

当我们使用Luhn算法验证信用卡时,为什么要反转数字?

当我们想要删除它时,为什么要在集合名称后添加“s”?

为什么我们要初始化 webelement?