📅  最后修改于: 2023-12-03 15:07:37.897000             🧑  作者: Mango
在 C++ 中,我们可以在派生类中重载基类的方法,但在某些情况下,我们可能需要隐藏掉基类中的方法,以防止与派生类中的方法产生冲突。
在基类中隐藏所有具有相同名称的重载方法可以通过使用 using
关键字和命名空间来实现。使用 using
关键字可以将基类的方法引入当前命名空间中,但我们可以通过在派生类中重新定义该方法来隐藏该方法。
以下是一个示例程序,演示了如何在派生类中隐藏基类中的重载方法:
#include <iostream>
class Base {
public:
virtual void method() {
std::cout << "Base method" << std::endl;
}
virtual void method(int) {
std::cout << "Base method with int" << std::endl;
}
};
class Derived : public Base {
public:
void method() override {
std::cout << "Derived method" << std::endl;
}
using Base::method; // 引入基类中的方法
void method(double) {
std::cout << "Derived method with double" << std::endl;
}
};
int main() {
Derived d;
d.method(); // 输出 Derived method
d.method(1); // 输出 Base method with int
d.method(3.14); // 输出 Derived method with double
return 0;
}
在上面的示例中,派生类 Derived
重新定义了 method
方法,以隐藏基类 Base
中的相应方法。但我们仍然可以通过 using
关键字引入基类方法,并在派生类中使用它。
在调用 d.method()
时,派生类中的 method
方法被调用,因为它已经被重新定义。而调用 d.method(1)
时,基类 Base
中的 method
方法被调用,因为它没有被重新定义。最后,调用 d.method(3.14)
时,派生类中的 method
方法被调用,因为派生类中的 method(double)
方法与其匹配。
因此,通过使用 using
关键字可以方便地隐藏基类中具有相同名称的重载方法,以确保派生类中的方法不会被误用。