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.
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 Shape
,具有一个纯虚函数 area()
:
struct Shape { virtual double area() const = 0; };
派生自 Shape
的具体类,例如 Circle
和 Square
,定义了其特定版本的 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; } };
可以使用函数对象将这些具体类作为参数传递给算法:
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;
在这个示例中,即使 shapes
存储的是不同的 Shape
派生类的指针,多态函数对象也会调用正确的 area()
rrreee
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, walaupunshapes
menyimpan penuding kepada Shape
yang berbeza > derived class , objek fungsi polimorfik juga akan memanggil fungsi area()
yang betul.
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!