C++ 虚函数详解:实现多态与实例代码

0 下载量 44 浏览量 更新于2024-09-09 收藏 80KB PDF 举报
转换" "C++中的虚函数是一个关键特性,用于实现多态性,使得基类指针能够调用到子类复写的成员函数。在继承体系中,虚函数允许子类重写父类的方法,从而实现不同对象根据自身类型执行不同的操作。虚函数的声明方式是在函数声明前加上`virtual`关键字,而`override`关键字则用于在子类中明确表示要重写父类的虚函数。这样,即使通过基类指针调用函数,也会根据实际对象的类型调用相应的实现。 C++中的虚函数分为两种情况:非纯虚函数和纯虚函数。非纯虚函数在基类中提供了一个默认实现,而子类可以选择重写或者保留这个实现。纯虚函数(声明时后面跟`=0`,如`virtual void func() = 0;`)则要求子类必须重写该函数,不能在基类中有具体实现,因此含有纯虚函数的类被视为抽象类,不能被实例化。 以下是一个简单的虚函数使用示例: ```cpp #include <iostream> class Base { public: virtual void print() { std::cout << "Base" << std::endl; } virtual ~Base() {} }; class Derived : public Base { public: void print() override { std::cout << "Derived" << std::endl; } }; int main() { Base* basePtr = new Derived(); basePtr->print(); // 这里会调用Derived的print方法,因为basePtr实际上指向的是Derived对象 delete basePtr; return 0; } ``` 在这个例子中,`Base`类有一个虚函数`print()`,`Derived`类重写了这个函数。通过基类指针`basePtr`调用`print()`时,由于`basePtr`实际上指向的是`Derived`对象,所以会执行`Derived`的`print()`函数,这就是多态性的体现。 另外,C++中的向上强制转换(Upcasting)是自动的,无需显式转换,就像示例代码中`fv(b)`和`fv(p)`那样,即使`b`是`base`类型,`p`是`plus`类型,但它们都可以作为`base`类型的参数传递,因为`plus`是`base`的子类。然而,向下强制转换(Downcasting)需要谨慎操作,因为它可能导致运行时错误,除非你能确保指针或引用确实指向正确的子类类型。 虚函数是C++实现多态的基础,它使得程序设计更加灵活,允许通过基类接口访问子类特有的功能,提高了代码的可扩展性和可维护性。同时,理解虚函数的工作原理以及如何正确使用它是掌握面向对象编程的关键步骤之一。