在下面的示例中,我试图通过在课堂上将其设为私有来隐藏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;
我在这里做错了什么?