Maison  >  Article  >  développement back-end  >  Interaction des expressions C++ Lambda avec la surcharge et la réécriture de fonctions

Interaction des expressions C++ Lambda avec la surcharge et la réécriture de fonctions

WBOY
WBOYoriginal
2024-04-20 10:30:02390parcourir

Les expressions Lambda interagissent avec la surcharge et la réécriture de fonctions en C++, fournissant un code flexible et réutilisable. Les expressions Lambda peuvent agir comme des fonctions surchargées, permettant l'utilisation d'expressions Lambda avec le même nom mais des paramètres différents ; elles peuvent également être utilisées pour remplacer des fonctions virtuelles dans une classe de base ; En utilisant des expressions lambda dans les surcharges de fonctions, vous pouvez fournir un comportement de fonction spécifique pour différents types de données ou calculs de forme.

C++Lambda 表达式与函数重载和重写的交互

Interaction des expressions Lambda avec la surcharge et la réécriture des fonctions C++

En C++, une expression Lambda est une fonction anonyme qui permet de définir et d'utiliser des fonctions sans déclarer de fonction nommée. Associés à la surcharge et à la réécriture de fonctions, ils offrent la possibilité d'exécuter du code plus flexible et réutilisable.

Surcharge de fonctions

La surcharge de fonctions permet aux fonctions portant le même nom d'accepter différents types et nombres de paramètres. Les fonctions surchargées sont différenciées en fonction de listes de paramètres et permettent de créer dans le code un comportement de fonction spécifique pour différents types de données.

Exemple :

double add(double a, double b) {
  return a + b;
}

int add(int a, int b) {
  return a + b;
}

Dans cet exemple, nous avons surchargé la fonction nommée add, une pour l'addition en virgule flottante et l'autre pour l'addition d'entiers. add 的函数,一个用于浮点数加法,另一个用于整数加法。

Lambda 表达式

Lambda 表达式使用 [] 括号表示,其中包含捕获列表(可选),后面是参数列表和函数体。

示例:

auto addLambda = [](double a, double b) { return a + b; };

此 Lambda 表达式表示了一个接受两个双精度浮点参数并返回其总和的函数。

函数重写

函数重写允许派生类覆盖基类中定义的函数。重写用于修改派生类中特定函数的行为,同时保留基类函数的名称和签名。

示例:

class Base {
public:
  virtual int add(int a, int b) {
    return a + b;
  }
};

class Derived : public Base {
public:
  int add(int a, int b) override {
    return a + b + 1;
  }
};

在示例中,Derived 类重写了 Base 类中的 add

Expressions Lambda

Les expressions Lambda sont exprimées à l'aide de crochets [], qui contiennent une liste de capture (facultatif), suivie de la liste d'arguments et du corps de la fonction.
  • Exemple :
  • auto circleCircumference = [](double radius) { return 2 * M_PI * radius; };
    auto rectangleCircumference = [](double length, double width) { return 2 * (length + width); };
    
    double getCircumference(Shape shape) {
      if (shape.type == Circle) {
        return circleCircumference(shape.radius);
      } else if (shape.type == Rectangle) {
        return rectangleCircumference(shape.length, shape.width);
      } else {
        throw invalid_argument("Unknown shape type");
      }
    }
  • Cette expression Lambda représente une fonction qui accepte deux arguments à virgule flottante double précision et renvoie leur somme.
  • Remplacement de fonctions

Le remplacement de fonctions permet à une classe dérivée de remplacer les fonctions définies dans une classe de base. Les remplacements sont utilisés pour modifier le comportement d'une fonction spécifique dans une classe dérivée tout en préservant le nom et la signature de la fonction de classe de base.

Exemple :

rrreee

Dans l'exemple, la classe Derived remplace la fonction add dans la classe Base, en lui fournissant Modified comportement, ajoute 1 à la somme. 🎜🎜🎜Expressions Lambda avec surcharge et réécriture🎜🎜🎜🎜🎜Expressions Lambda avec surcharge : 🎜Les expressions Lambda peuvent agir comme des fonctions surchargées, permettant l'utilisation d'expressions Lambda avec le même nom mais des paramètres différents dans la même portée. 🎜🎜🎜Expressions Lambda et remplacement : 🎜Les expressions Lambda peuvent être utilisées pour remplacer les fonctions virtuelles dans les classes de base. Les classes dérivées peuvent fournir un comportement de fonction différent en attribuant une expression lambda à un pointeur de fonction de classe de base. 🎜🎜🎜🎜Cas pratique🎜🎜🎜Considérons un programme qui doit calculer le périmètre de différentes formes. Les expressions Lambda peuvent être définies pour calculer le périmètre de différentes formes et utilisées dans les surcharges de fonctions : 🎜rrreee🎜 Dans cet exemple, les expressions Lambda permettent une définition flexible des calculs de périmètre pour différentes formes et une intégration dans les surcharges de fonctions, fournissant ainsi un code évolutif et réutilisable. 🎜

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