Warisan dan polimorfisme mempengaruhi gandingan kelas: Pewarisan meningkatkan gandingan kerana kelas terbitan bergantung pada kelas asas. Polimorfisme mengurangkan gandingan kerana objek boleh bertindak balas kepada mesej secara konsisten melalui fungsi maya dan penunjuk kelas asas. Amalan terbaik termasuk menggunakan warisan dengan berhati-hati, menentukan antara muka awam, mengelakkan penambahan ahli data pada kelas asas dan menyahgandingkan kelas melalui suntikan kebergantungan. Contoh praktikal yang menunjukkan cara menggunakan polimorfisme dan suntikan pergantungan untuk mengurangkan gandingan dalam aplikasi akaun bank.
Impak pewarisan dan polimorfisme pada gandingan kelas dalam C++
Pengenalan
Warisan dan polimorfisme ialah konsep utama dalam C++ yang menggalakkan kebolehgunaan semula kod dan fleksibiliti. Walau bagaimanapun, ia juga boleh memberi impak yang ketara pada tahap gandingan sesuatu kelas.
Ijazah gandingan
Ijazah gandingan mengukur tahap pergantungan antara kelas. Gandingan tinggi bermakna kelas berkait rapat, dan pengubahsuaian pada satu kelas boleh menjejaskan kelas lain.
Warisan dan gandingan
Warisan mewujudkan hubungan subordinasi antara kelas ibu bapa dan anak. Kelas terbitan bergantung pada kelas asas kerana sebarang perubahan dalam kelas asas boleh menjejaskan kelas terbitan. Kebergantungan ini meningkatkan gandingan.
Contoh:
class Animal { public: virtual void speak(); }; class Dog : public Animal { public: void speak() override; }; class Cat : public Animal { public: void speak() override; };
Dalam contoh ini, kelas Anjing
dan Cat
mewarisi daripada kelas Animal
. Jika fungsi speak
kelas Animal
diubah suai, kelas Dog
dan Cat
juga perlu diubah suai. Kebergantungan ini menghasilkan tahap gandingan yang tinggi. 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
dan Bulatan
kedua-duanya mewarisi daripada kelas Shape
. Fungsi utama
menggunakan polimorfisme untuk memanggil fungsi kawasan
untuk setiap objek bentuk tanpa mengetahui jenis khusus mereka. Penyahgandingan ini membenarkan pengubahsuaian kelas Rectangle
atau Bulatan
tanpa mengubah suai fungsi utama
. 🎜🎜🎜Amalan Terbaik🎜🎜Untuk mengurangkan gandingan, amalan terbaik berikut harus diikuti: 🎜Akaun
dan CheckingAccount
dan SavingsAccount Kelas terbitan. Untuk mengurangkan gandingan, kita boleh menggunakan polimorfisme dan suntikan kebergantungan. 🎜rrreee🎜Dengan menggunakan suntikan kebergantungan, kelas <code>Pelanggan
dipisahkan daripada jenis akaun tertentu. Ia hanya perlu tahu cara memanggil fungsi getBalance
. Ini membolehkan jenis akaun baharu ditambah dengan mudah tanpa mengubah suai kelas Customer
. 🎜Atas ialah kandungan terperinci Bagaimanakah warisan dan polimorfisme mempengaruhi gandingan kelas dalam C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!