1

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

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

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

谢谢你。

4

1 回答 1

1

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

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

该链接包含您正在做什么的具体示例,并重复了我上面引用的内容以及基本成员如何被派生成员简单地隐藏。

于 2016-05-03T01:37:48.893 回答