【发布时间】:2017-01-25 09:05:00
【问题描述】:
在下面的示例中,我试图通过将 Elayer 设为私有类中的最后一个子类 Designer 来隐藏 using Employee::showEveryDept -
#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;
我在这里做错了什么?
【问题讨论】:
-
@πάνταῥεῖ 请告诉一个使用 gui 的优秀的基于 linux 的编译器。我目前对直接使用 gdb 并不太习惯购买 windows。
-
@hg_git 如果您要我推荐 IDE,我建议您使用 Eclipse CDT。
-
@hg_git 普通命令行 gdb 然后。即使在我蹩脚的笔记本电脑上,我也可以使用 Eclipse。
-
@πάνταῥεῖ 调试器无助于找出代码未生成预期编译错误的原因
标签: c++ c++11 inheritance polymorphism using-declaration