本文深入解析了C++编程语言中关于继承机制的关键概念——子类对父类成员函数的覆盖与隐藏。通过具体代码示例,详细阐述了如何正确使用这些特性来实现功能扩展和重用,并探讨了常见的陷阱和最佳实践技巧,帮助开发者避免常见错误,有效提升程序设计质量。
C++子类父类成员函数的覆盖与隐藏实例详解
### 函数的覆盖
**条件:**
(1)基类中的被覆盖函数必须声明为虚函数(使用`virtual`关键字)
(2)需要在派生类和基类中分别定义这两个同名且参数列表相同的函数
(3)两个函数的名字及参数列表完全一致。
### 函数的隐藏
**条件:**
(1)子类与父类中的方法具有相同名称,但它们可以有不同的参数类型或数量。
通过下面的例子来理解这些概念:
```cpp
#include
using namespace std;
class CBase{
public:
virtual void xfn(int i){
cout << CBase::xfn() called << endl;
}
};
class CDerived : public CBase {
public:
void xfn(int i) override { // 注意这里使用了override关键字,表明这个函数覆盖基类的同名虚函数
cout << CDerived::xfn() called << endl;
}
void hideFunction(CBase* p, int j){
CBase::xfn(j); // 调用父类的方法
xfn(p->xfn(10)); // 这里调用了派生类中隐藏的函数,而不是基类中的那个。
}
};
int main(){
CDerived d;
d.hideFunction(&d, 2);
}
```
以上代码展示了如何在C++中实现和理解虚方法覆盖与重载(或称为“隐藏”)的概念。