It is possible to check (for example by gcc) which methods or members can be moved to protected or private section?
答案 0 :(得分:2)
考虑以下部分代码:
class foo{
protected:
void foo_method_1(){};
int foo_member_var;
};
class bar : public foo{
void bar_method_1(){
foo_method_1();
}
};
如果要确定foo类的哪些成员和方法可以是私有的,则必须将它们全部移动到私有部分。所以它看起来像这样:
class foo{
private:
void foo_method_1(){};
int foo_member_var;
};
...
现在它不会编译,这是GCC抛出的第一个错误:
prog.cpp:5:8: error: 'void foo::foo_method_1()' is private
void foo_method_1(){};
您知道,您必须将foo_method_1移动到受保护的部分。所以它看起来像这样:
class foo{
private:
int foo_member_var;
protected:
void foo_method_1(){};
};
...
现在它将编译。您必须为班级中的每个方法和成员重复此过程。对于公共部分,您可以采用与上述相同的方式进行操作。
答案 1 :(得分:2)
您无法以编程方式执行此操作,不会。 这实际上是一件好事。
当然,您可以创建一个与C ++解析器集成的工具,然后 - 逐个 - 使某些成员运行public
并留下任何不会导致程序出错的地方
但是,为了做到这一点,您的整个程序需要对该工具可见。也许如果你有一个简单的项目不是问题,但如果你正在写一个几乎不可能的图书馆。
即使你能做到这一点,你所产生的课程设计也将是一个绝对的混乱。 只有人类程序员才知道API的哪些部分是为了公共消费而设计的,并且这与当前正在使用的API的哪些部分并不总是相同
坚持手动方法,但不要只是复制机器的方式,根据编译的内容和不编译的内容随机猜测。使用你的大脑和你对这个类应该做的事情的记忆,确定哪些函数应该是du -h --max-depth=1 | sort -hr
,哪些不应该。
理想情况下,在您首次设计课程时尽量做到正确!你应该花费更多的时间来设计你的程序,而不是实际编程,以免你很快就会遇到像这样的维护噩梦。
答案 2 :(得分:1)
没有。编译器会看到代码,而不是设计。