在下面的例子中,我試圖通過使私人類Elayer
隱藏從最後一個子類Designer
using Employee::showEveryDept
-using聲明不能正常工作
#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;
我在這做錯了什麼?
@πάνταῥεῖ請告訴一個好的基於Linux的編譯器,它使用gui。我目前不太習慣直接使用gdb,也不太習慣購買windows。 –
@hg_git如果你問我一個IDE的建議,我會建議Eclipse CDT。 –
@hg_git然後是純命令行gdb。我對Eclipse很滿意,即使在我的跛腳筆記本電腦上也是如此。 –