В следующем примере я пытаюсь скрыть using Employee::showEveryDept
из последнего дочернего класса Designer
, сделав его закрытым в классе Elayer
-
#include <iostream>
class Employee {
private:
char name[5] = "abcd";
void allDept() { std::cout << "Woo"; }
public:
void tellName() { std::cout << name << "\n"; }
virtual void showEveryDept()
{
std::cout << "Employee can see every dept\n";
allDept();
}
};
class ELayer : public Employee {
private:
using Employee::showEveryDept;
protected:
ELayer() {}
public:
using Employee::tellName;
};
class Designer : public ELayer {
private:
char color = 'r';
public:
void showOwnDept() { std::cout << "\nDesigner can see own dept\n"; }
};
int main()
{
Employee* E = new Designer;
E->showEveryDept(); // should not work
Designer* D = dynamic_cast<Designer*>(E);
D->showOwnDept();
}
Но он все еще компилируется, а выход -
Employee can see every dept Woo Designer can see own dept
Но я явно сделал это частным, см. private: using Employee::showEveryDept;
Что я здесь делаю неправильно?