C++编程:虚函数与函数重载详解

需积分: 10 1 下载量 59 浏览量 更新于2024-08-19 收藏 2.77MB PPT 举报
"本资源是一份关于C++入门的课件,主要讲解了虚函数的定义和使用,以及函数的一些特性,包括具有缺省参数值的函数和函数的重载概念。" 在C++编程中,虚函数是面向对象特性的重要组成部分,它允许我们实现多态性。虚函数使得子类能够重写基类的行为,即使我们通过基类指针或者引用去调用这些函数。在基类中,虚函数的定义格式如下: ```cpp virtual 返回类型 函数名(参数列表); ``` 一旦将一个成员函数声明为虚函数,那么在派生类中,即使没有再次使用`virtual`关键字,该函数也会保持虚函数的特性。这意味着,如果派生类重写了这个虚函数,调用者可以通过基类指针调用到派生类的实现,而不是基类的实现。这在处理多态对象时非常有用。 例如: ```cpp class Base { public: virtual void func() { cout << "Base" << endl; } }; class Derived : public Base { public: void func() override { cout << "Derived" << endl; } }; Base* basePtr = new Derived(); basePtr->func(); // 这将调用Derived的func(),而非Base的func() ``` 接下来,我们讨论具有缺省参数值的函数。在C++中,我们可以为函数参数提供默认值,使得在调用函数时可以省略某些参数,而使用预设的值。例如: ```cpp int fac(int n = 2) { int t = 1; for (int i = 1; i <= n; i++) t *= i; return t; } // 调用示例 fac(); // 输出:2 fac(6); // 输出:720 ``` 然而,使用缺省参数值时需要注意以下几点: 1. 缺省参数必须从右向左设定,不允许在左边设定。 2. 函数原型可以不提供参数名称,但必须提供类型和缺省值。 3. 缺省值只能在函数原型中定义一次,后续定义不能包含缺省值。 接下来,我们讲到函数的重载,这是C++允许在同一作用域内定义多个同名函数,但它们的参数列表必须不同(不同数量或不同类型的参数)。重载函数让代码更具可读性,因为它们可以根据传递的参数自动选择合适的版本。例如: ```cpp int fun(int a, int b) { return a + b; } int fun(int a) { return a * a; } // 调用示例 fun(3, 5); // 输出:8 fun(5); // 输出:25 ``` 要注意的是,仅仅返回类型不同并不构成函数重载的条件,因为调用函数时是根据参数列表来区分的,不是根据返回类型。如: ```cpp int fun(int a, int b) { return a + b; } float fun(int a, int b) { return static_cast<float>(a * a); } // 这两个fun函数实际上不能视为重载,因为编译器会因名称冲突而报错 ``` 本课件涵盖了C++中关于虚函数、具有缺省参数值的函数和函数重载的基本概念,这些都是理解和编写C++程序的关键知识。通过这些特性,开发者可以创建更加灵活和可扩展的代码结构。