Disyorkan, 2024

Pilihan Editor

Perbezaan Antara Fungsi Overloading dan Overriding dalam C ++

Polimorfisme adalah salah satu ciri penting OOP. Ini bermakna 'menggunakan satu nama untuk pelbagai bentuk'. Polimorfisme boleh dilaksanakan dengan menggunakan fungsi 'overloading', 'overloading operator' dan 'fungsi maya'. Kedua-duanya, 'overloading' dan 'overriding' membayangkan konsep polimorfisme. Di sini, 'overloading' adalah menyusun masa polimorfisme dan 'mengatasi' adalah masa polimorfisme. Belajar lebih lanjut, jika kita bercakap mengenai perbezaan utama dalam 'overloading' dan 'overriding'. Dalam 'overloading', kita mentakrifkan semula fungsi beban dengan nama fungsi yang sama tetapi, bilangan dan jenis parameter yang berbeza. Dalam prototaip 'override' fungsi yang ditindih adalah sama di seluruh program tetapi, fungsi yang akan ditindih didahului oleh kata kunci 'maya' dalam kelas asas dan ditakrifkan semula oleh kelas yang diturunkan tanpa sebarang kata kunci.

Selanjutnya, kita mengkaji perbezaan di antara muatan dan override dengan bantuan carta perbandingan.


Carta Perbandingan:

Asas untuk PerbandinganOverloadingMengatasi
PrototaipPrototaip berbeza kerana bilangan atau jenis parameter mungkin berbeza.Semua aspek prototaip mestilah sama.
Kata kunciTiada kata kunci digunakan semasa muatan berlebihan.Fungsi yang akan ditindih didahului oleh kata kunci 'maya', di kelas asas.
Faktor yang membezakanNombor atau jenis parameter berbeza yang menentukan versi fungsi sedang dipanggil.Fungsi kelas mana yang dipanggil oleh penuding, ditentukan oleh, alamat objek kelas mana yang diberikan kepada penunjuk itu.
Menentukan corakFungsi ditakrifkan semula dengan nama yang sama, tetapi bilangan dan jenis parameter yang berlainan.Fungsi ditakrifkan, didahului oleh kata kunci 'maya' dalam kelas utama dan ditakrifkan semula oleh kelas yang diturunkan dengan kata kunci keluar.
Masa pencapaianMasa kumpul.Jalankan masa.
Fungsi pembina / mayaConstructors boleh dibebankan.Fungsi maya boleh ditindih.
Destructor
Destructor tidak boleh dibebankan.Destructor boleh ditindih.
MengikatOverloading mencapai pengikatan awal.Override merujuk kepada pengikatan lewat.

Definisi Overloading

Polimorfisme kompilasi-masa dipanggil 'overloading.' Oleh kerana beban muatan dijana daripada konsep polimorfisme, ia menyediakan "antara muka umum untuk pelbagai kaedah". Maksudnya, jika suatu fungsi terlalu banyak, ia mengandungi nama fungsi yang sama semasa ia ditakrifkan semula.

Fungsi beban adalah berbeza berbanding dengan 'nombor atau jenis parameter' yang berlainan, ia menjadikan satu fungsi beban berbeza dari yang lain. Dengan cara ini, pengkompil mengiktiraf fungsi yang dipenuhi beban yang dipanggil. Fungsi yang paling lazim adalah 'pembina'. 'Penyalinan Salin' adalah jenis "overloading pembina".

Pelaksanaan overloading dalam C ++

 beban kelas {int a, b; awam: load int (int x) {// load pertama () berfungsi a = x; kembali; int load (int x, int y) {// second load () function a = x; b = y; kembali a * b; }}; int main () {overload O1; O1.load (20); // beban pertama () fungsi panggilan O1.load (20, 40); / second load () function call} 

Di sini fungsi beban () beban kelas telah dibebankan. Kedua-dua fungsi beban kelas dapat dibezakan dengan cara yang pertama beban () fungsi hanya menerima parameter integer tunggal, sedangkan fungsi beban kedua () menerima dua parameter integer. Apabila objek kelas beban memanggil fungsi beban () dengan satu parameter, beban pertama () berfungsi dipanggil. Apabila objek memanggil beban () berfungsi melewati dua parameter, fungsi beban kedua () akan dipanggil.

Definisi Pengecualian

Polimorfisme yang dicapai semasa jangka masa dipanggil 'overriding'. Ia dicapai dengan menggunakan 'warisan' dan 'fungsi maya'. Fungsi yang akan ditindih didahului oleh kata kunci 'maya' dalam kelas asas dan ditakrifkan semula dalam kelas yang diturunkan tanpa sebarang kata kunci.

Salah satu perkara yang paling penting untuk diingat dalam kes utama adalah bahawa prototaip fungsi yang dipindah tidak boleh berubah sementara kelas ditakrifkan semula. Apabila fungsi yang ditarik balik diberikan panggilan, C ++ menentukan versi fungsi yang dipanggil berdasarkan 'jenis objek yang ditunjukkan oleh penunjuk' di mana fungsi pemanggilan selesai.

Pelaksanaan Override dalam C ++

 class base {public: funct void virtual () {// function virtual cout class base << "This is a class base's ()"; }}; class derived1: public base {public: void funct () {// function virtual class base redefined in cout class derived1 << "This is a class class derived1 ()"; }}; class derived2: public base {public: void funct () {// function virtual class base redefined in cout class derived2  funct (); // panggilan ke kelas kelas derived1 (). * p = & d2; p-> funct (); // panggilan ke kelas kelas derived2 (). kembali 0; } 

Di sini, terdapat satu kelas asas yang diwariskan oleh dua kelas yang diturunkan. Fungsi maya ditakrifkan dalam kelas asas dengan kata kunci 'maya', dan ia ditakrifkan semula oleh kedua kelas yang diturunkan tanpa kata kunci. Dalam utama (), kelas asas menghasilkan pembolehubah penunjuk 'p' dan objek 'b'; 'derived1' kelas mewujudkan objek d1 dan kelas derived2 mewujudkan objek d2 '.

Sekarang, pada mulanya alamat objek kelas asas 'b' ditugaskan kepada penunjuk kelas 'p' asas. 'p' memberikan panggilan kepada fungsi fungsi (), jadi fungsi kelas asas dipanggil. Kemudian alamat objek kelas derived1 'd1' ditugaskan kepada pointer 'p', sekali lagi ia memberikan panggilan kepada funct (); di sini fungsi fungsi () kelas derived1 dilaksanakan. Akhirnya, penunjuk 'p' ditugaskan kepada objek kelas derived2. Kemudian 'p' memanggil fungsi funct () yang melaksanakan fungsi func () kelas derived2.

Jika kelas 1 / derived2 tidak mentakrifkan semula sifat (), maka kelas () kelas asas akan dipanggil, sebagai fungsi maya adalah 'hierarki.'

Perbezaan Utama Antara Kelebihan Beban dan Peningkatan

  1. Prototaip fungsi yang sedang dibebankan berbeza kerana jenis dan bilangan parameter yang dihantar kepada fungsi yang terlalu banyak. Sebaliknya, prototaip fungsi yang ditindas tidak berubah kerana fungsi yang ditindih melakukan tindakan yang berlainan untuk kelas yang berlainan yang dimilikinya tetapi dengan jenis dan bilangan parameter yang sama.
  2. Nama fungsi overloaded tidak mendahului dengan kata kunci mana-mana, nama fungsi yang ditindih mendahului dengan keyord "Virtual" di kelas asas sahaja.
  3. Fungsi kelebihan beban yang digunakan adalah bergantung kepada jenis atau bilangan parameter yang dihantar kepada fungsi. Fungsi terlindas kelas mana yang digunakan bergantung pada, alamat objek kelas yang diberikan kepada penuding, yang memanggil fungsi tersebut.
  4. Fungsi beban yang berlarutan akan diselesaikan semasa masa penyusunan. Fungsi yang diguna untuk dipanggil dapat diselesaikan semasa runtime.
  5. Constructors boleh dibebankan tetapi tidak dapat ditindih.
  6. Pemusnah tidak boleh dibebankan, tetapi ia boleh ditindih.
  7. Overloading mencapai pengikatan awal kerana fungsi yang dipenuhi beban akan digunakan diselesaikan semasa masa penyusunan. Pengecilan mencapai pengikatan lewat kerana fungsi yang dipindah yang akan dipanggil diselesaikan semasa runtime.

Kesamaan

  1. Keduanya digunakan untuk fungsi anggota kelas.
  2. Polimorfisme adalah konsep asas di belakang keduanya.
  3. Nama fungsi tetap sama semasa kami memohon beban muatan dan mengatasi fungsi.

Kesimpulannya

Overloading dan overriding muncul serupa, tetapi ini tidak berlaku. Fungsi boleh dibebankan tetapi, mana-mana kelas tidak boleh lagi mentakrifkan fungsi beban pada masa depan. Fungsi maya tidak boleh dibebankan; mereka hanya boleh ditindih.

Top