c++ hide override overload
时间: 2023-12-08 15:04:26 浏览: 246
overload and override
在C++中,我们可以使用关键字来隐藏、覆盖和重载成员函数。
1. 隐藏(Hide):当派生类中定义了与基类中同名的成员函数时,基类的成员函数将被隐藏。可以使用作用域解析运算符(::)来访问被隐藏的基类成员函数。
```cpp
class Base {
public:
void foo() {
cout << "Base::foo()" << endl;
}
};
class Derived : public Base {
public:
void foo() {
cout << "Derived::foo()" << endl;
}
};
int main() {
Derived d;
d.foo(); // 输出 Derived::foo()
d.Base::foo(); // 输出 Base::foo()
return 0;
}
```
2. 覆盖(Override):当派生类中定义了与基类中同名、同参数列表的成员函数时,称为覆盖。在派生类对象上调用该函数时,将执行派生类的实现而不是基类的实现。
```cpp
class Base {
public:
virtual void foo() {
cout << "Base::foo()" << endl;
}
};
class Derived : public Base {
public:
void foo() override { // 使用 override 关键字显式声明覆盖
cout << "Derived::foo()" << endl;
}
};
int main() {
Derived d;
Base* b = &d;
b->foo(); // 输出 Derived::foo()
return 0;
}
```
3. 重载(Overload):在同一个作用域内,可以定义多个同名函数但参数列表不同,称为重载。编译器根据函数调用时所传递的参数类型和数量来决定调用哪个函数。
```cpp
class MyClass {
public:
void foo(int x) {
cout << "foo(int): " << x << endl;
}
void foo(double x) {
cout << "foo(double): " << x << endl;
}
};
int main() {
MyClass obj;
obj.foo(10); // 输出 foo(int): 10
obj.foo(3.14); // 输出 foo(double): 3.14
return 0;
}
```
希望以上解释能够帮助到你!如果你有更多的问题,请继续提问。
阅读全文