継承とポリモーフィズムはクラスの結合に影響します。派生クラスは基本クラスに依存するため、継承により結合が増加します。ポリモーフィズムにより、オブジェクトは仮想関数と基本クラス ポインターを通じて一貫した方法でメッセージに応答できるため、結合が軽減されます。ベスト プラクティスには、継承を控えめに使用すること、パブリック インターフェイスを定義すること、基本クラスへのデータ メンバーの追加を回避すること、依存関係の注入を通じてクラスを分離することが含まれます。ポリモーフィズムと依存性注入を使用して銀行口座アプリケーションの結合を軽減する方法を示す実践的な例。
C++ のクラス結合に対する継承とポリモーフィズムの影響
はじめに
継承とポリモーフィズムは、コードの再利用性と柔軟性を促進する C++ の重要な概念です。ただし、クラスの結合度に大きな影響を与える可能性もあります。
結合度
結合度は、クラス間の依存関係の度合いを測定します。結合度が高いということは、クラスが密接に関連しており、あるクラスへの変更が別のクラスに影響を与える可能性があることを意味します。
継承と結合
継承は、親クラスと子クラスの間に従属関係を作成します。基本クラスの変更は派生クラスに影響を与える可能性があるため、派生クラスは基本クラスに依存します。この依存関係により結合が増加します。
例:
class Animal { public: virtual void speak(); }; class Dog : public Animal { public: void speak() override; }; class Cat : public Animal { public: void speak() override; };
この例では、Dog
クラスと Cat
クラスは Animal
クラスを継承します。 Animal
クラスの speak
関数を変更した場合、Dog
クラスと Cat
クラスも変更する必要があります。この依存性により、高度な結合が生じます。 Dog
和 Cat
类继承自 Animal
类。如果 Animal
类的 speak
函数被修改,Dog
和 Cat
类也需要修改。这种依赖性导致了高耦合度。
多态性和耦合度
多态性允许对象以一致的方式响应不同的消息,即使它们属于不同的类。这可以通过虚函数和基类指针来实现。
例子:
class Shape { public: virtual double area(); }; class Rectangle : public Shape { public: double area() override; }; class Circle : public Shape { public: double area() override; }; int main() { Shape* shapes[] = {new Rectangle(), new Circle()}; for (Shape* shape : shapes) { cout << shape->area() << endl; } }
在这个例子中,Rectangle
和 Circle
类都继承自 Shape
类。main
函数使用多态性来调用每个形状对象的 area
函数,而无需知道它们的具体类型。这种解耦允许修改 Rectangle
或 Circle
类,而无需修改 main
函数。
最佳实践
为了降低耦合度,应遵循以下最佳实践:
实战案例:
假设我们有一个银行账户应用程序,其中包含 Account
基类和 CheckingAccount
和 SavingsAccount
派生类。为了降低耦合度,我们可以使用多态性和依赖注入。
class Account { public: virtual double getBalance(); }; class CheckingAccount : public Account { public: double getBalance() override; }; class SavingsAccount : public Account { public: double getBalance() override; }; class Customer { private: Account* account; public: Customer(Account* account) : account(account) {} double getBalance() { return account->getBalance(); } }; int main() { CheckingAccount checkingAccount; SavingsAccount savingsAccount; Customer checkingCustomer(&checkingAccount); Customer savingsCustomer(&savingsAccount); cout << checkingCustomer.getBalance() << endl; cout << savingsCustomer.getBalance() << endl; }
通过使用依赖注入,Customer
类与特定的账户类型解耦。它只需知道如何调用 getBalance
函数即可。这允许轻松添加新类型的账户,而无需修改 Customer
Rectangle
クラスと Circle
クラスは両方とも Shape
クラスを継承しています。 main
関数はポリモーフィズムを使用して、各シェイプ オブジェクトの特定の型を知らなくても area
関数を呼び出します。この分離により、main
関数を変更せずに Rectangle
クラスまたは Circle
クラスを変更できるようになります。 🎜🎜🎜ベスト プラクティス🎜🎜 結合を減らすには、次のベスト プラクティスに従う必要があります: 🎜Account
基本クラス、CheckingAccount
および SavingsAccount 派生クラス。結合を減らすために、ポリモーフィズムと依存性注入を使用できます。 🎜rrreee🎜依存関係の注入を使用すると、<code>Customer
クラスが特定のアカウント タイプから分離されます。 getBalance
関数を呼び出す方法を知る必要があるだけです。これにより、Customer
クラスを変更せずに、新しいタイプのアカウントを簡単に追加できます。 🎜以上が継承とポリモーフィズムは C++ のクラス結合にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。