【发布时间】:2010-10-08 07:58:03
【问题描述】:
我有一个派生自类 Base 的类 Derived。在 Derived 的函数中,我可以访问 Base 的受保护成员。例如,我可以这样做。
class Base
{
protected:
int i;
}
class Derived : class Base
{
void process()
{
i = 5;
}
}
我的问题是,从派生类访问基类成员时是否可以强制使用范围解析运算符?原因是我想在代码中明确哪些变量来自基类。强制执行是为了让我不会意外跳过范围解析运算符(我很粗心)。我不喜欢使用访问器,因为在 Derived 类中需要来自基类的许多成员,这使得编码变得乏味。顺便说一句,我正在使用 MSVC 2010。
class Base
{
protected:
int i;
}
class Derived : class Base
{
void process()
{
Base::i = 5; //enforce so that i=5 won't compile
}
}
【问题讨论】:
-
为什么...你想这样做?如果您对受保护的成员不满意,请不要使用它们。
-
我建议阅读 Herb Sutter 关于封装的 GotW 文章。总结一下:"there is never a good reason to write public or protected data members"
-
这会比调用受保护成员“base_i”等更好的“文档”吗? (丑陋,但这是你弄的一团糟;-P)。
-
@James:我认为 Spock 可能会一般地询问成员。虽然他的示例是关于成员数据,但我阅读它的方式同样适用于成员函数。
-
你们有一点关于它的有用性。最后我发现这样做毕竟不是真的有用。认为我实际上关心的是从派生类中的成员变量中识别局部变量,我认为使用不同的命名样式会有所帮助。无论如何,感谢cmets
标签: c++ visual-studio