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

Patricia Arquette
Lepaskan: 2024-11-01 08:33:02
asal
159 orang telah melayarinya

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

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

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!

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
Artikel terbaru oleh pengarang
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!