Adakah objek fungsi STL menyokong polimorfisme? Bagaimana untuk mencapai

王林
Lepaskan: 2024-04-25 10:39:01
asal
759 orang telah melayarinya

Objek fungsi STL menyokong polimorfisme, yang dilaksanakan seperti berikut: gunakan fungsi maya dan warisan maya untuk menentukan kelas asas abstrak dan kelas terbitannya. Tentukan versi fungsi tertentu untuk setiap kelas terbitan. Lulus kelas konkrit sebagai parameter kepada algoritma.

STL 函数对象是否支持多态性?如何实现?

Adakah objek fungsi STL menyokong polimorfisme?

Objek fungsi dalam Perpustakaan Templat Standard (STL) menyokong polimorfisme masa jalan, membenarkan penentuan dinamik fungsi mana yang perlu dipanggil semasa pelaksanaan program.

Kaedah pelaksanaan:

Dengan menggunakan fungsi maya dan pewarisan maya, objek fungsi polimorfik boleh dilaksanakan.

Contoh Kod:

Pertimbangkan contoh berikut, di mana kelas asas abstrak Bentuk ditakrifkan, dengan fungsi maya tulen kawasan(): Shape,具有一个纯虚函数 area()

struct Shape {
  virtual double area() const = 0;
};
Salin selepas log masuk

派生自 Shape 的具体类,例如 CircleSquare,定义了其特定版本的 area() 函数:

struct Circle : public Shape {
  double radius;

  Circle(double radius) : radius(radius) {}

  double area() const override {
    return M_PI * radius * radius;
  }
};

struct Square : public Shape {
  double side_length;

  Square(double side_length) : side_length(side_length) {}

  double area() const override {
    return side_length * side_length;
  }
};
Salin selepas log masuk

可以使用函数对象将这些具体类作为参数传递给算法:

std::vector<Shape*> shapes{new Circle(2), new Square(3)};

double total_area = 0;
for (const auto& shape : shapes) {
  total_area += shape->area();
}

std::cout << "Total area: " << total_area << std::endl;
Salin selepas log masuk

在这个示例中,即使 shapes 存储的是不同的 Shape 派生类的指针,多态函数对象也会调用正确的 area()rrreee

ialah diperoleh daripada kelas Konkrit Shape, seperti Bulatan dan Square, mentakrifkan versi khusus mereka bagi kawasan() fungsi:

rrreeeAnda boleh menggunakan objek fungsi untuk menghantar kelas konkrit ini sebagai argumen kepada algoritma: rrreee

Dalam contoh ini, walaupun shapes menyimpan penuding kepada Shapeyang berbeza > derived class , objek fungsi polimorfik juga akan memanggil fungsi area() yang betul.

    Kes praktikal:
  • Objek fungsi polimorfik sangat berguna dalam penjadualan dinamik dan kod gandingan longgar, seperti:
🎜Dalam perpustakaan grafik, kelas bentuk boleh mewakili pelbagai jenis grafik. Objek fungsi polimorfik membenarkan kawasan dilukis dan dikira tanpa mengubah suai kod grafik. 🎜🎜Dalam aplikasi pangkalan data, kelas sambungan boleh mengabstrak jenis sambungan pangkalan data yang berbeza. Objek fungsi polimorfik membenarkan pertanyaan dan kemas kini dilakukan secara telus. 🎜🎜

Atas ialah kandungan terperinci Adakah objek fungsi STL menyokong polimorfisme? Bagaimana untuk mencapai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan