我完全知道,我将向您展示的语法是一种机制,用于从派生类中调用例如基类方法。但是在我遇到的某些代码中,在类实现之外使用了相同的语法,并且我想知道这是否是合法的(从标准C ++的意义上来说)构造,并且所得到的行为是否得到了很好的定义?
class Base
{
public:
virtual void method(int arg)
{
...
}
};
class Derived : public Base
{
public:
virtual void method(int arg)
{
...
Base::method(arg); // I'm fully comfortable with this...
}
};
int main(int argc, char* argv[])
{
Derived d;
Derived* pD = &d;
pD->Base::method(2); // is this allowed?
...
合法,是的,但是它显示出严重的设计错误。一个类(Derived
在这种情况下,该类)应该提供完整的接口,无论是特定的还是继承的,都不应强迫其调用者深入研究其内胆。如果的客户Derived
需要合理地调用Base::method
而不是Derived::method
,Derived
则应提供一个公共方法来提供该功能:
void alternateMethod(int arg) {Base::method(arg);}
当然,如果您真的需要调用Base::method
并且不能更改Derived
(旧版代码或设计不正确的外部库),则除了使用该技巧之外,别无选择。
总结并回答您的特定问题:是的,这是法律构想,是的,其行为已得到明确定义。但是重新设计Derived
会更好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句