Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya memanfaatkan pembina dan pengendali tugasan Kelas Asas dalam C?

Bagaimanakah saya memanfaatkan pembina dan pengendali tugasan Kelas Asas dalam C?

DDD
DDDasal
2024-11-01 05:46:02672semak imbas

How do I leverage Base Class's constructors and assignment operator in C  ?

Cara Memanfaatkan Pembina Kelas Asas dan Operator Tugasan dalam C

Dalam C , kelas mewarisi boleh mewarisi tingkah laku kelas asas, termasuk pembina dan pengendali tugasan. Pertimbangkan kelas asas B dengan set pembina dan pengendali tugasan:

<code class="cpp">class B {
 public:
  B();
  B(const string& s);
  B(const B& b) { *this = b; }
  B& operator=(const B& b);
};</code>

Sekarang, anda ingin mencipta kelas terbitan D yang mengatasi fungsi foo() sambil mewarisi set pembina yang sama, termasuk pembina salinan dan pengendali tugasan. Walau bagaimanapun, untuk mengelakkan pertindihan, anda ingin menggunakan pembina dan pengendali sedia ada dalam B.

Invokasi Eksplisit:

Anda boleh memanggil pembina kelas asas dan pengendali tugasan secara eksplisit dalam pembina kelas terbitan dan pengendali tugasan, masing-masing. Ini memastikan pembolehubah ahli kelas asas dimulakan dengan betul.

<code class="cpp">class D : public B {
 public:
  D(const D& d) : B(d), additional_(d.additional_) {}
  D& operator=(const D& d) {
    B::operator=(d);
    additional_ = d.additional_;
    return *this;
  }
 private:
  int additional_;
};</code>

Invokasi Tersirat:

Menariknya, walaupun anda tidak mentakrifkan pembina salinan dan pengendali tugasan dalam kelas terbitan, pengkompil akan menjana versi lalai. Versi lalai ini secara tersirat memanggil pembina salinan kelas asas dan pengendali tugasan, masing-masing.

Sebagai contoh, dengan kelas asas berikut:

<code class="cpp">class ImplicitBase {
  int value_;
};</code>

Pengendali tugasan kelas terbitan berikut secara tersirat memanggil asas pengendali tugasan kelas:

<code class="cpp">class Derived : public ImplicitBase {
  const char* name_;
 public:
  Derived& operator=(const Derived& d) {
    ImplicitBase::operator=(d); // Implicit call to base class's assignment operator
    name_ = strdup(d.name_);
    return *this;
  }
};</code>

Atas ialah kandungan terperinci Bagaimanakah saya memanfaatkan pembina dan pengendali tugasan Kelas Asas 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