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

DDD
Lepaskan: 2024-11-01 05:46:02
asal
672 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!