Maison >développement back-end >C++ >Spécifications standard du langage C++ pour la surcharge et la réécriture de fonctions

Spécifications standard du langage C++ pour la surcharge et la réécriture de fonctions

WBOY
WBOYoriginal
2024-04-21 09:09:01893parcourir

La surcharge de fonctions vous permet de définir une fonction avec le même nom dans la même portée, mais nécessite une liste de paramètres différente ; tandis que la substitution de fonction vous permet de définir une fonction avec le même nom et la même liste de paramètres que la classe de base dans une classe dérivée, nécessitant le mot-clé override, le type de retour et la liste de paramètres est exactement la même que la fonction de classe de base. Exemples de surcharge : print(int), print(double); exemples d'écrasement : foo() dans la classe Derived remplace foo() dans la classe Base.

C++ 语言标准对函数重载和重写的规范

Spécifications standard du langage C++ pour la surcharge et la réécriture de fonctions

Surcharge de fonctions

La surcharge permet de définir plusieurs fonctions avec le même nom dans la même portée, mais leurs listes de paramètres doivent être différentes. Le standard du langage C++ exige que la surcharge de fonctions suive les spécifications suivantes :

  • Les types de retour doivent être les mêmes.
  • Les listes de paramètres doivent être différentes, c'est-à-dire le nombre, le type ou l'ordre des paramètres.
  • Les qualificatifs const, volatile et référence peuvent être utilisés pour distinguer les fonctions surchargées.

Exemple :

void print(int x);
void print(double x);

Remplacement de fonction

Le remplacement permet de définir une fonction dans une classe dérivée avec le même nom et la même liste de paramètres que dans la classe de base. Le standard du langage C++ exige que la réécriture des fonctions suive les spécifications suivantes :

  • La fonction réécrite doit avoir le mot-clé override.
  • Le type de retour doit être le même que la fonction de classe de base.
  • La liste des paramètres doit être exactement la même que la fonction de la classe de base (y compris le type, l'ordre et les qualificatifs).
  • Les fonctions de classe dérivées ne doivent pas avoir des droits d'accès inférieurs à ceux des fonctions de classe de base (c'est-à-dire que protected ne peut remplacer que les fonctions protégées ou publiques).

Exemple :

class Base {
public:
    virtual void foo();
};

class Derived : public Base {
public:
    override void foo() override;  // 重写基类中的 foo
};

Cas pratique

Surcharge de fonctions :

#include <iostream>

using namespace std;

void print(int x) {
    cout << "int: " << x << endl;
}

void print(double x) {
    cout << "double: " << x << endl;
}

int main() {
    print(10);  // 调用 int 版本的 print
    print(3.14); // 调用 double 版本的 print
    return 0;
}

Réécriture de fonctions :

#include <iostream>

using namespace std;

class Shape {
public:
    virtual void draw() = 0;  // 纯虚函数
};

class Rectangle : public Shape {
public:
    void draw() override {
        cout << "Drawing a rectangle" << endl;
    }
};

int main() {
    Rectangle r;
    r.draw(); // 调用 Rectangle 类中的重写函数
    return 0;
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn