C++11 中“using”关键字与继承和构造函数的必要性混淆

问题描述 投票:0回答:1

我是 C++ 的新手,在探索 C++11 概念时,我遇到了“using”关键字和继承之间的关系。 我的代码由基类和派生派生类组成。基类有一个名为 foo() 的成员函数。在派生类中,我利用“using”关键字使基类的 foo() 函数可访问。

class Base {
public:
void foo() { std::cout << "Base::foo()" << std::endl; }
};

class Derived : public Base {
public:
using Base::foo;  
};

int main() {
Derived obj;
obj.foo();  
return 0;
}

但是,即使没有“using”关键字(通过注释 using Base::foo; 行),程序编译和运行也不会出现错误。

我对这里的“using”关键字是否是强制的感到困惑。您能否解释一下在哪些场景中使用“using”关键字至关重要以及如果省略它我可能会遇到哪些问题?

提前感谢您的回答!

我尝试通过删除“using”关键字来运行代码,并且代码执行顺利。但是,当我向ChatGPT询问此问题时,它表示如果没有“using”关键字,代码将不正确,并建议我使用它.

function c++11 using inherited-constructors
1个回答
0
投票

ChatGPT(再次)错了。你是对的,这里没有必要。完全没有歧义,

Derived
仅继承自
Base
。然而,C++ 支持多重继承,在这种情况下,您可能需要选择特定的
foo

此外,

Derived::foo
Base::foo
一样是公开的,所以那里也没有变化。

© www.soinside.com 2019 - 2024. All rights reserved.