当我们想私下继承基础 class 时,为什么要公开名称?
why name publicizing is there when we want to inherit the base class privately?
一般来说,我们希望使用私有继承来隐藏基类的实现细节class。如果这是真的,
1) 为什么又出现了名称宣传功能?只是为了语言的完整性还是有实际用途?
2) 尽管我公布了基本 class 函数名称,派生的 class 仍然可以声明另一个具有相同名称的函数。请考虑以下代码。
#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;
}
在上面的代码片段中,即使我们公开了名称,我们仍然可以在派生class中声明名称,并且我们可以访问基class版本的成员变量。如何管理内存?
谢谢。
http://en.cppreference.com/w/cpp/language/using_declaration
If the derived class already has a member with the same name, parameter list, and qualifications, the derived class member hides or overrides (doesn't conflict with) the member that is introduced from the base class.
link 有具体的例子说明你在做什么,重复了我上面引用的内容以及派生成员如何简单地隐藏基本成员。
一般来说,我们希望使用私有继承来隐藏基类的实现细节class。如果这是真的,
1) 为什么又出现了名称宣传功能?只是为了语言的完整性还是有实际用途?
2) 尽管我公布了基本 class 函数名称,派生的 class 仍然可以声明另一个具有相同名称的函数。请考虑以下代码。
#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;
}
在上面的代码片段中,即使我们公开了名称,我们仍然可以在派生class中声明名称,并且我们可以访问基class版本的成员变量。如何管理内存?
谢谢。
http://en.cppreference.com/w/cpp/language/using_declaration
If the derived class already has a member with the same name, parameter list, and qualifications, the derived class member hides or overrides (doesn't conflict with) the member that is introduced from the base class.
link 有具体的例子说明你在做什么,重复了我上面引用的内容以及派生成员如何简单地隐藏基本成员。