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 Fleksibiliti: 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!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;
}
Triangle
, Square
dan Circle
yang melaksanakan antara muka. rrreeePertimbangan tukar ganti