Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah cara saya menggunakan Pembina Kelas Asas dan Operator Tugasan dalam Kelas Terbitan dalam C?

Bagaimanakah cara saya menggunakan Pembina Kelas Asas dan Operator Tugasan dalam Kelas Terbitan dalam C?

Patricia Arquette
Patricia Arquetteasal
2024-11-01 08:33:02160semak imbas

How do I use Base Class Constructors and Assignment Operators in Derived Classes in C  ?

Menggunakan Pembina Kelas Asas dan Operator Tugasan dalam C

Dalam pengaturcaraan berorientasikan objek, pewarisan membenarkan kelas mewarisi sifat dan kaedah kelas asasnya. Ciri berkuasa ini membolehkan penggunaan semula dan kebolehselenggaraan kod. Walau bagaimanapun, pengendalian pembina dan pengendali tugasan dalam kelas yang diwarisi boleh menjadi mencabar.

Pertimbangkan kelas B dengan set pembina dan pengendali tugasan. Matlamatnya ialah untuk mencipta kelas D yang mewarisi yang menggantikan foo() tetapi mengekalkan pembina dan pengendali tugasan B.

Invokasi Eksplisit

Satu cara untuk mencapai ini ialah dengan memanggil pembina dan pengendali tugasan secara eksplisit dalam D. Ini melibatkan penggunaan pembina kelas asas yang sesuai secara manual semasa mencipta kejadian D dan menggunakan Base::operator=() untuk menetapkan nilai dalam pengendali tugasan.

<code class="cpp">class Base {
  // ...
public:
  Base(const Base&) { /*...*/ }
  Base& operator=(const Base&) { /*...*/ }
};

class Derived : public Base {
  int additional_;
public:
  Derived(const Derived& d)
    : Base(d) // dispatch to base copy constructor
    , additional_(d.additional_)
  {
  }

  Derived& operator=(const Derived& d)
  {
    Base::operator=(d);
    additional_ = d.additional_;
    return *this;
  }
};</code>

Penggunaan Tersirat

Menariknya, walaupun tanpa mentakrifkan pembina dan pengendali tugasan secara eksplisit, pengkompil boleh menjananya secara automatik. Ini adalah kes bagi kelas dengan warisan mudah dan penyesuaian minimum.

<code class="cpp">class ImplicitBase { 
  int value_; 
  // No operator=() defined
};

class Derived : public ImplicitBase {
  const char* name_;
public:
  Derived& operator=(const Derived& d)
  {
    ImplicitBase::operator=(d); // Call compiler generated operator=
    name_ = strdup(d.name_);
    return *this;
  }
};  </code>

Oleh itu, apabila mewarisi daripada kelas asas yang menyediakan set pembina yang komprehensif dan pengendali tugasan, adalah mungkin untuk menggunakannya dalam kelas terbitan tanpa perlu menulis semulanya, selagi tiada fungsi tambahan diperlukan dalam fungsi tersebut.

Atas ialah kandungan terperinci Bagaimanakah cara saya menggunakan Pembina Kelas Asas dan Operator Tugasan dalam Kelas Terbitan 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