Как правило, мы хотим использовать частное наследование, чтобы скрыть детали реализации в базовом классе. Если это правда,
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;
}
В приведенном выше фрагменте, хотя мы публикуем имя, мы все равно можем объявить имя в производном классе и получить доступ к версии базовых классов переменных-членов. Как память управляется?
Спасибо.
http://en.cppreference.com/w/cpp/language/using_declaration
Если у производного класса уже есть член с тем же именем, списком параметров и квалификациями, член производного класса скрывает или переопределяет (не конфликтует) член, представленный в базовом классе.
Эта ссылка содержит конкретные примеры того, что вы делаете, повторяет то, что я цитировал выше, и как базовый член просто скрыт производным членом.
Других решений пока нет …