Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk menangani pertukaran antara warisan dan polimorfisme dalam reka bentuk kelas C++?
Kedua-dua warisan dan polimorfisme membolehkan penggunaan semula kod, tetapi terdapat perbezaan dalam pertukaran: Warisan: Kelebihan: Menggalakkan penggunaan semula kod, melaksanakan perhubungan "is-a" Kelemahan: Gandingan yang ketat, isu kelas asas yang rapuh Polimorfisme: Kelebihan: Memudahkan gandingan longgar bertambah baik fleksibiliti kod. Kelemahan: overhead, kerumitan Dalam senario sebenar, pewarisan boleh digunakan untuk mewujudkan hubungan "is-a" antara kelas asas dan kelas terbitan boleh digunakan untuk melaksanakan pelbagai jenis objek dalam antara muka untuk bertindak balas dalam a panggilan kaedah bersatu.
C++ Reka Bentuk Kelas: Warisan vs Polimorfisme Tradeoff
Dalam reka bentuk kelas C++, pewarisan dan polimorfisme ialah dua konsep asas. Walaupun kedua-duanya membenarkan penggunaan semula kod, mereka mempunyai pertukaran yang berbeza.
Warisan
Warisan membolehkan satu kelas (kelas terbitan) mewarisi sifat dan tingkah laku daripada kelas lain (kelas asas).
Kelebihan:
Kelemahan:
es bergantung pada kelas asasPolymorphism membolehkan objek bertindak balas kepada panggilan kaedah yang berbeza dengan cara yang seragam, tanpa mengira jenisnya.
Menggalakkan gandingan longgar: objek berkomunikasi melalui antara muka dan bukannya jenis konkrit
Kes praktikal
Shape
,其中包含形状的通用属性和方法。然后,您可以创建 Triangle
、Square
和 Circle
等派生类,这些类继承自 Shape
并实现自己的特定行为。
class Shape { public: virtual double area() const = 0; // 纯虚函数,必须在派生类中实现 }; class Triangle : public Shape { public: double area() const override { return 0.5 * base * height; } double base, height; }; class Square : public Shape { public: double area() const override { return side * side; } double side; }; class Circle : public Shape { public: double area() const override { return PI * radius * radius; } double radius; };
使用多态性,您可以创建一个 Shape
接口,其中包含形状的通用方法。然后,您可以创建实现该接口的 Triangle
、Square
和 Circle
Katakan anda perlu mereka bentuk antara muka yang mengurus dan pelbagai bentuk (cth. bulatan).
Menggunakan warisan, anda boleh mencipta kelas asas Segitiga
, Square
dan Bulatan
, yang mewarisi daripada Shape
dan melaksanakannya sendiri tingkah laku tertentu. class Shape {
public:
virtual double area() const = 0;
};
class Triangle : public Shape {
public:
double area() const override { return 0.5 * base * height; }
double base, height;
};
class Square : public Shape {
public:
double area() const override { return side * side; }
double side;
};
class Circle : public Shape {
public:
double area() const override { return PI * radius * radius; }
double radius;
};
int main() {
vector<Shape*> shapes;
shapes.push_back(new Triangle());
shapes.push_back(new Square());
shapes.push_back(new Circle());
for (Shape* shape : shapes) {
cout << "Area: " << shape->area() << endl;
}
return 0;
}
Menggunakan polimorfisme, anda boleh mencipta antara muka Triangle
, Square
dan Circle
yang melaksanakan antara muka.
Fleksibiliti:
Polymorphism memberikan fleksibiliti yang lebih besar jika objek perlu diubah suai dengan kerap. 🎜🎜🎜Amalan terbaik untuk membuat pertukaran adalah menggunakan komposisi untuk memanfaatkan warisan dan polimorfisme. Sebagai contoh, anda boleh menggunakan warisan untuk mewujudkan perhubungan biasa dalam kelas asas bentuk, sambil menggunakan polimorfisme untuk melaksanakan gelagat tertentu. 🎜Atas ialah kandungan terperinci Bagaimana untuk menangani pertukaran antara warisan dan polimorfisme dalam reka bentuk kelas C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!