継承とポリモーフィズムはどちらもコードの再利用を可能にしますが、トレードオフには違いがあります: 継承: 利点: コードの再利用を促進し、「is-a」関係を実装します 欠点: 密結合、脆弱な基底クラスの問題 ポリモーフィズム: 利点: 促進 疎結合の改善コードの柔軟性 欠点: オーバーヘッド、複雑さ。実際のシナリオでは、継承を使用して、基本クラスと派生クラスの間の「is-a」関係を確立し、インターフェイス内でさまざまなタイプのオブジェクトを実装できます。統一されたメソッド呼び出し。
C++ クラス設計: 継承とポリモーフィズムのトレードオフ
C++ クラス設計では、継承とポリモーフィズムが 2 つの基本概念です。どちらもコードを再利用できますが、異なるトレードオフがあります。
継承
継承を使用すると、あるクラス (派生クラス) が別のクラス (基本クラス) からプロパティと動作を継承できます。
利点:
欠点:
ポリモーフィズム
ポリモーフィズムにより、オブジェクトは型に関係なく、さまざまなメソッド呼び出しに均一な方法で応答できます。
長所:
複雑さ: ポリモーフィズムの実装には、慎重なインターフェイス設計が必要です
継承を使用すると、シェイプの共通のプロパティとメソッドを含む基本クラス 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
クラスを作成できます。
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; }
Shape
,其中包含形状的通用属性和方法。然后,您可以创建 Triangle
、Square
和 Circle
等派生类,这些类继承自 Shape
并实现自己的特定行为。
使用多态性,您可以创建一个 Shape
接口,其中包含形状的通用方法。然后,您可以创建实现该接口的 Triangle
、Square
和 Circle
関係の種類:
サブクラスに「is-a」関係がある場合 (つまり、三角形は形状である) ) の場合は、継承の方が良い選択になる可能性があります。
以上がC++ クラス設計における継承とポリモーフィズムの間のトレードオフにどのように対処するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。