Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah warisan dan polimorfisme mempengaruhi gandingan kelas dalam C++?

Bagaimanakah warisan dan polimorfisme mempengaruhi gandingan kelas dalam C++?

PHPz
PHPzasal
2024-06-05 14:33:00489semak imbas

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.

C++ 中继承和多态性如何影响类的耦合度?

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. DogCat 类继承自 Animal 类。如果 Animal 类的 speak 函数被修改,DogCat 类也需要修改。这种依赖性导致了高耦合度。

多态性和耦合度
多态性允许对象以一致的方式响应不同的消息,即使它们属于不同的类。这可以通过虚函数和基类指针来实现。

例子:

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;
    }
}

在这个例子中,RectangleCircle 类都继承自 Shape 类。main 函数使用多态性来调用每个形状对象的 area 函数,而无需知道它们的具体类型。这种解耦允许修改 RectangleCircle 类,而无需修改 main 函数。

最佳实践
为了降低耦合度,应遵循以下最佳实践:

  • 谨慎使用继承,仅在绝对必要时使用。
  • 使用接口或抽象基类定义公共接口。
  • 避免向基类添加数据成员,因为这可能会导致派生类高度耦合。
  • 通过依赖注入技术解耦类。

实战案例:
假设我们有一个银行账户应用程序,其中包含 Account 基类和 CheckingAccountSavingsAccount 派生类。为了降低耦合度,我们可以使用多态性和依赖注入。

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

🎜Polymorphism dan gandingan 🎜🎜Polymorphism membenarkan objek bertindak balas kepada mesej yang berbeza dengan cara yang konsisten, walaupun ia tergolong dalam kelas yang berbeza. Ini boleh dicapai melalui fungsi maya dan penunjuk kelas asas. 🎜🎜🎜Contoh: 🎜🎜rrreee🎜Dalam contoh ini, kelas 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: 🎜
  • Gunakan harta pusaka dengan berhati-hati dan hanya apabila benar-benar perlu.
  • Gunakan antara muka atau kelas asas abstrak untuk menentukan antara muka awam.
  • Elakkan menambah ahli data pada kelas asas kerana ini boleh membawa kepada tahap gandingan yang tinggi dalam kelas terbitan.
  • Menyahgandingkan kelas melalui teknologi suntikan pergantungan.
🎜🎜Kes praktikal: 🎜🎜Andaikan kita mempunyai aplikasi akaun bank yang mengandungi kelas asas 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn