虚函数在派生类的实现和成员函数重写有什么区别
时间: 2024-10-08 19:07:12 浏览: 29
C++学习篇?纯虚函数和抽象类
5星 · 资源好评率100%
在 C++ 中,虚函数(Virtual Function)是一种特殊类型的成员函数,它的主要目的是为了支持多态性,即让基类指针或引用能够正确地调用派生类中的相应函数。当你在基类声明一个虚函数时,即使使用的是基类的指针或引用,也能根据实际指向的对象类型执行正确的函数体。
**派生类的实现**:
当在派生类中重写基类的虚函数时,你需要明确指定该函数为 `virtual` 或 `override`(C++11及以后版本)。例如:
```cpp
class Base {
public:
virtual void foo() { // 声明虚函数
cout << "Base::foo()" << endl;
}
};
class Derived : public Base {
public:
// 重写虚函数
void foo() override { // 使用override关键字确保覆盖行为
cout << "Derived::foo()" << endl;
}
};
```
这里,`Derived` 类的 `foo()` 函数就是对 `Base` 类的虚函数进行了重写。
**成员函数重写**:
普通成员函数重写是指在同一类的不同版本中定义具有相同名称、返回类型和参数列表的函数。这种情况下,只有当前类的实例才会调用该版本的函数。例如:
```cpp
class MyClass {
public:
void bar() {
cout << "MyClass::bar()" << endl;
}
};
// 在同一个类中
void MyClass::bar() { // 不需要virtual关键字
cout << "MyClass::bar (overridden)" << endl;
}
```
这里,`MyClass` 的两个 `bar()` 函数实际上不是多态的,除非你在 `bar()` 函数前加上 `virtual` 关键字,使之成为虚函数。
总结一下,区别在于:
- **虚函数**:使得基类指针可以调用到正确的派生类版本,提供了运行时动态绑定的能力。
- **成员函数重写**:在同一个类内提供不同版本的功能,如果没有特别指定,不涉及继承关系和多态。
阅读全文