Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk melaksanakan polimorfisme dalam reka bentuk kelas C++?

Bagaimana untuk melaksanakan polimorfisme dalam reka bentuk kelas C++?

WBOY
WBOYasal
2024-06-03 19:23:00579semak imbas

Polymorphism membolehkan kelas terbitan mempunyai gelagat berbeza sambil berkongsi antara muka yang sama Langkah-langkah untuk mencapai ini termasuk: mencipta kelas asas, kelas terbitan, fungsi maya dan menggunakan penunjuk kelas asas Kod sampel menunjukkan cara menggunakan hierarki kelas bentuk ( Shape , Segi empat tepat, Bulatan) untuk melaksanakan polimorfisme dan mengira jumlah luas bentuk yang berbeza.

Bagaimana untuk melaksanakan polimorfisme dalam reka bentuk kelas C++?

Reka bentuk kelas untuk melaksanakan polimorfisme dalam C++

Apakah itu polimorfisme?

Polymorphism membenarkan kelas terbitan dan kelas asas mempunyai gelagat berbeza sambil berkongsi antara muka yang sama. Ia menyediakan cara yang elegan untuk mencipta koleksi objek dengan gelagat yang serupa tetapi pelaksanaan yang berbeza.

Langkah untuk melaksanakan polimorfisme:

  1. Cipta kelas asas: Tentukan antara muka biasa yang akan dikongsi oleh kelas terbitan.
  2. Kelas terbitan: Buat kelas terbitan daripada kelas asas untuk melaksanakan gelagat tertentu.
  3. Fungsi maya: Isytihar fungsi maya dalam kelas asas dan takrifkan semula dalam kelas terbitan. Ini membolehkan panggilan fungsi diikat secara dinamik semasa masa jalan.
  4. Penunjuk kelas asas: Gunakan penunjuk kelas asas atau rujukan untuk memegang objek kelas terbitan untuk mencapai polimorfisme.

Kes praktikal:

Pertimbangkan hierarki kelas bentuk:

class Shape {
public:
    virtual double area() = 0; // 纯虚函数(必须在派生类中重新定义)
};

class Rectangle : public Shape {
public:
    Rectangle(double width, double height) : width_(width), height_(height) {}
    double area() override { return width_ * height_; }
private:
    double width_;
    double height_;
};

class Circle : public Shape {
public:
    Circle(double radius) : radius_(radius) {}
    double area() override { return 3.14 * radius_ * radius_; }
private:
    double radius_;
};

Penggunaan:

// 创建不同形状的集合
vector<Shape*> shapes;
shapes.push_back(new Rectangle(2.0, 3.0));
shapes.push_back(new Circle(4.0));

// 使用基类指针计算总面积
double totalArea = 0.0;
for (Shape* shape : shapes) {
    totalArea += shape->area(); // 使用多态性动态绑定函数调用
}

// 输出总面积
cout << "Total area: " << totalArea << endl;

Output: reee

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan polimorfisme dalam reka bentuk kelas C++?. 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