C++面试题:如何实现函数重载与重写?

在C++编程语言中,函数重载与重写是两个重要的概念,它们在面向对象编程中扮演着至关重要的角色。本文将深入探讨如何实现函数重载与重写,并通过对实际案例的分析,帮助读者更好地理解这两个概念。

一、函数重载

函数重载是指在同一作用域内,允许存在多个同名函数,但它们的参数列表不同。在C++中,实现函数重载需要满足以下条件:

  1. 同名函数:重载函数必须具有相同的函数名。
  2. 参数列表不同:重载函数的参数列表必须不同,包括参数的数量、类型或顺序。
  3. 返回类型可以相同或不同:重载函数的返回类型可以相同或不同。

以下是一个简单的函数重载示例:

#include 
using namespace std;

// 函数重载
void func(int a) {
cout << "参数类型为int" << endl;
}

void func(double a) {
cout << "参数类型为double" << endl;
}

int main() {
func(10); // 调用第一个func函数
func(3.14); // 调用第二个func函数
return 0;
}

在这个例子中,func 函数被重载了两次,一次接受整数参数,另一次接受双精度浮点数参数。

二、函数重写

函数重写是指在继承关系中,子类可以重写基类中的同名函数。在C++中,实现函数重写需要满足以下条件:

  1. 继承关系:子类必须继承自基类。
  2. 同名函数:子类中的函数必须与基类中的函数同名。
  3. 参数列表相同:子类中的函数参数列表必须与基类中的函数参数列表相同。
  4. 返回类型相同或可以转换为基类返回类型:子类中的函数返回类型必须与基类中的函数返回类型相同或可以转换为基类返回类型。

以下是一个简单的函数重写示例:

#include 
using namespace std;

// 基类
class Base {
public:
virtual void func() {
cout << "基类func函数" << endl;
}
};

// 派生类
class Derived : public Base {
public:
// 重写基类func函数
void func() override {
cout << "派生类func函数" << endl;
}
};

int main() {
Derived d;
d.func(); // 调用派生类重写的func函数
return 0;
}

在这个例子中,Derived 类继承自 Base 类,并重写了基类中的 func 函数。

三、案例分析

以下是一个实际案例,展示了函数重载和重写的应用:

#include 
using namespace std;

// 基类
class Base {
public:
virtual void func(int a) {
cout << "基类func函数,参数为int" << endl;
}

virtual void func(double a) {
cout << "基类func函数,参数为double" << endl;
}
};

// 派生类
class Derived : public Base {
public:
// 重写基类func函数
void func(int a) override {
cout << "派生类func函数,参数为int" << endl;
}

// 函数重载
void func(double a) {
cout << "派生类func函数,参数为double" << endl;
}
};

int main() {
Derived d;
d.func(10); // 调用派生类重写的func函数
d.func(3.14); // 调用派生类重载的func函数
return 0;
}

在这个案例中,Derived 类重写了基类中的 func 函数,并重载了另一个 func 函数。当调用 d.func(10) 时,将调用派生类重写的 func 函数;当调用 d.func(3.14) 时,将调用派生类重载的 func 函数。

通过以上分析,我们可以看到函数重载和重写是C++编程中非常实用的特性。掌握这两个概念,可以帮助我们更好地进行面向对象编程,提高代码的可读性和可维护性。

猜你喜欢:猎头赚佣金