gpt4 book ai didi

c++ - 从非派生代码调用基本方法,这可能吗?合法的?

转载 作者:行者123 更新时间:2023-11-28 00:16:54 25 4
gpt4 key购买 nike

我完全清楚,我将要向您展示的语法是调用例如派生类中的基类方法。但是在我遇到的一些代码中,在类实现之外使用了相同的语法,我想知道这是否是合法的(在标准 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)应该提供一个完整的接口(interface),无论是特定的还是继承的,而不是强制它的调用者深入研究它的内部结构。如果 Derived 的客户端合理地需要调用 Base::method 而不是 Derived::method,那么 Derived应该提供一个公共(public)方法来提供该功能:

void alternateMethod(int arg) {Base::method(arg);}

当然,如果你真的需要调用Base::method并且不能改变Derived(遗留代码或设计不当的外部库),你可能没有替代方案,但使用该技巧。

总结并回答您的具体问题:是的,它是一个合法的构造,是的,它的行为是明确定义的。但是重新设计 Derived 会好得多。

关于c++ - 从非派生代码调用基本方法,这可能吗?合法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29626838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com