📜  C++中的函数重载和浮动(1)

📅  最后修改于: 2023-12-03 14:39:58.039000             🧑  作者: Mango

C++中的函数重载和浮动

函数重载和函数浮动(也称为函数重写)是C++中常用的特性,用于实现多态性和代码的灵活性。在本文中,我们将介绍函数重载和函数浮动的概念、语法和示例。

1. 函数重载(Function Overloading)
1.1 概念

函数重载是指在同一个作用域中定义多个同名函数,但这些函数的参数列表不同。通过参数列表的不同,编译器可以根据调用时传入的实际参数的类型和数量来选择正确的函数进行调用。

1.2 语法
返回类型 函数名(参数列表1) {
    // 函数实现1
}

返回类型 函数名(参数列表2) {
    // 函数实现2
}

在函数重载中,返回类型可以相同也可以不同,但参数列表必须不同。

1.3 示例
#include <iostream>

void print(int num) {
    std::cout << "Printing an integer: " << num << std::endl;
}

void print(double num) {
    std::cout << "Printing a double: " << num << std::endl;
}

int main() {
    print(5);       // 调用print(int)函数
    print(3.14);    // 调用print(double)函数
    
    return 0;
}

输出:

Printing an integer: 5
Printing a double: 3.14

上述示例中,我们定义了两个同名的函数 print,但它们的参数类型不同。根据实际参数的类型,编译器会选择合适的函数进行调用。

2. 函数浮动(Function Overriding)
2.1 概念

函数浮动是指在派生类中重新定义基类中已有的成员函数。通过函数浮动,派生类可以对基类的函数进行重写,以实现更具体的功能。

2.2 语法
class 基类 {
public:
    返回类型 函数名(参数列表) {
        // 基类函数实现
    }
};

class 派生类 : public 基类 {
public:
    返回类型 函数名(参数列表) {
        // 派生类函数实现(重写基类函数)
    }
};
2.3 示例
#include <iostream>

class Shape {
public:
    virtual void print() {
        std::cout << "This is a shape." << std::endl;
    }
};

class Rectangle : public Shape {
public:
    void print() override {
        std::cout << "This is a rectangle." << std::endl;
    }
};

int main() {
    Shape* shape1 = new Shape();
    shape1->print();        // 调用基类的print()函数

    Shape* shape2 = new Rectangle();
    shape2->print();        // 调用派生类的print()函数
    
    return 0;
}

输出:

This is a shape.
This is a rectangle.

上述示例中,我们定义了一个基类 Shape,其中有一个名为 print 的成员函数。然后,我们创建了一个派生类 Rectangle,并在其中重写了基类的 print 函数。通过动态绑定,我们可以在运行时选择调用基类函数还是派生类函数。

结论

通过函数重载和函数浮动,我们可以使用相同的函数名和不同的参数列表来提供更灵活的代码结构和多态性。这使得我们可以根据输入参数的不同,选择调用不同的函数或不同类的函数。

注意:在函数浮动时,基类函数必须用 virtual 关键字进行声明,以便在运行时进行动态绑定,才能实现多态性。

以上就是C++中的函数重载和函数浮动的介绍。这两个特性使得C++成为一种强大且灵活的编程语言,可以更好地满足开发人员的需求。