Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Interaksi ungkapan C++ Lambda dengan lebihan fungsi dan penulisan semula

Interaksi ungkapan C++ Lambda dengan lebihan fungsi dan penulisan semula

WBOY
WBOYasal
2024-04-20 10:30:02356semak imbas

Ekspresi Lambda berinteraksi dengan lebihan fungsi dan menulis semula dalam C++, memberikan kod yang fleksibel dan boleh digunakan semula. Ungkapan Lambda boleh bertindak sebagai fungsi terlampau beban, membenarkan penggunaan ungkapan Lambda dengan nama yang sama tetapi parameter berbeza ia juga boleh digunakan untuk mengatasi fungsi maya dalam kelas asas. Dengan menggunakan ungkapan lambda dalam lebihan fungsi, anda boleh menyediakan gelagat fungsi khusus untuk jenis data atau pengiraan bentuk yang berbeza.

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

Interaksi ungkapan Lambda dengan fungsi C++ yang berlebihan dan menulis semula

Dalam C++, ungkapan Lambda ialah fungsi tanpa nama yang membolehkan fungsi ditakrifkan dan digunakan tanpa mengisytiharkan fungsi yang dinamakan. Bersama-sama dengan kelebihan beban dan penulisan semula fungsi, ia memberikan keupayaan untuk melaksanakan kod yang lebih fleksibel dan boleh digunakan semula.

Function Overloading

Function overloading membolehkan fungsi dengan nama yang sama menerima jenis dan nombor parameter yang berbeza. Fungsi terlampau beban dibezakan berdasarkan senarai parameter dan membenarkan gelagat fungsi khusus untuk jenis data yang berbeza dibuat dalam kod.

Contoh:

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

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

Dalam contoh ini, kami melebihkan fungsi bernama add, satu untuk penambahan titik terapung dan satu lagi untuk penambahan integer. 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

Ekspresi Lambda

Ekspresi Lambda dinyatakan menggunakan kurungan [], yang mengandungi senarai tangkapan (pilihan), diikuti dengan senarai parameter dan badan fungsi.
  • Contoh:
  • 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");
      }
    }
  • Ungkapan Lambda ini mewakili fungsi yang menerima dua hujah titik terapung berketepatan dua dan mengembalikan jumlahnya.
  • Fungsi mengatasi

Fungsi mengatasi membenarkan kelas terbitan untuk mengatasi fungsi yang ditakrifkan dalam kelas asas. Penggantian digunakan untuk mengubah suai gelagat fungsi tertentu dalam kelas terbitan sambil mengekalkan nama dan tandatangan fungsi kelas asas.

Contoh:

rrreee

Dalam contoh, kelas Derived mengatasi fungsi add dalam kelas Base, menyediakannya dengan Modified tingkah laku, menambah 1 kepada jumlah. 🎜🎜🎜Ekspresi Lambda dengan terlebih muatan dan menulis semula🎜🎜🎜🎜🎜Ekspresi Lambda dengan lebihan muatan: 🎜Ekspresi Lambda boleh bertindak sebagai fungsi terlampau beban, membenarkan penggunaan ungkapan Lambda dengan nama yang sama tetapi skop yang berbeza dalam skop yang sama. 🎜🎜🎜Ekspresi lambda dan mengatasi: 🎜Ekspresi Lambda boleh digunakan untuk mengatasi fungsi maya dalam kelas asas. Kelas terbitan boleh memberikan gelagat fungsi yang berbeza dengan memberikan ungkapan lambda kepada penuding fungsi kelas asas. 🎜🎜🎜🎜Kes Praktikal🎜🎜🎜Pertimbangkan program yang perlu mengira perimeter pelbagai bentuk. Ungkapan Lambda boleh ditakrifkan untuk mengira perimeter bentuk yang berbeza dan digunakan dalam lebihan fungsi: 🎜rrreee🎜 Dalam contoh ini, ungkapan Lambda membenarkan takrifan fleksibel pengiraan perimeter untuk bentuk yang berbeza dan penyepaduan ke dalam lebihan fungsi, dengan itu menyediakan kod berskala dan boleh digunakan semula. 🎜

Atas ialah kandungan terperinci Interaksi ungkapan C++ Lambda dengan lebihan fungsi dan penulisan semula. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn