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

Confusion about the necessity of "using" keyword with inheritance and constructors in C++11

提问人:Syrlax 提问时间:8/24/2023 更新时间:8/24/2023 访问量:41

问:

我是学习C++的新手,在探索C++11概念时,我遇到了“using”关键字和继承之间的关系。 我的代码由基类和派生派生类组成。Base 类有一个名为 foo() 的成员函数。在 Derived 类中,我利用 “using” 关键字使 Base 类的 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”关键字来运行代码,并且代码执行顺利。但是,当我向 ChatGPT 提出这个问题时,它表示没有“using”关键字的代码是不正确的,并建议我使用它。

C++11 使用 继承构造函数

评论

1赞 Brian61354270 8/24/2023
“'我对'using'关键字在这里是否是强制性的感到困惑.”“但是,即使没有'using'关键字,程序也会编译和运行而不会出错。听起来你自己回答了这个问题:)

答:

0赞 MSalters 8/24/2023 #1

ChatGPT (再次)错了。你是对的,这里没有必要。完全没有歧义,只继承自 .但是,C++ 支持多重继承,在这种情况下,您可能需要选择特定的 .DerivedBasefoo

此外,是公开的,所以那里也没有变化。Derived::fooBase::foo