Konstruktor Virtual C++

Konstruktor Virtual C



C++ tidak memfasilitasi kita untuk membuat konstruktor virtual karena tidak mungkin untuk mengganti konstruktor kelas. Jadi, virtualisasi konstruktor tidak ada artinya. Tidak ada konsep membuat konstruktor virtual dalam program C++, tapi kita dapat membuat destruktor virtual di sana. Kita juga dapat mendefinisikannya karena pemrograman konstruktor di C++ tidak dapat dianggap virtual karena ketika konstruktor kelas dipanggil, memori tidak berisi tabel virtual yang menunjukkan bahwa tidak ada penunjuk virtual yang dibuat. Oleh karena itu, konstruktor harus selalu non-virtual.

Namun, destruktor virtual mungkin ada. Di sini, kami akan menunjukkan apa yang terjadi ketika kita membuat konstruktor virtual di C++ serta cara kerja destruktor virtual alih-alih konstruktor virtual.

Contoh 1:

Mari buat konstruktor virtual dan mulai kode kita dengan menempatkan file header “iostream”. File header ini untuk fungsi yang dideklarasikan di dalamnya seperti “cin” dan “cout”. Setelah ini, kita menambahkan namespace “std”, jadi kita tidak dapat menambahkan “std” ini dengan setiap fungsi dalam kode kita. Setelah ini, kita membuat kelas yang merupakan kelas dasar dari kode kita dengan nama “my_base” dan kemudian menambahkan “public” untuk membuat konstruktor virtual.







Konstruktor virtual dibuat di sini dengan menempatkan kata kunci “virtual”. Di dalam konstruktor virtual ini, kami menempatkan pernyataan “cout”. Di bawah ini, kita membuat fungsi bernama 'show' di mana kita menggunakan 'cout' lagi. Setelah ini, kita membuat kelas turunan dari kelas dasar ini dengan nama “my_derived” dan kemudian membuat konstruktor “my_derived()” di kolom “public”. Kami memasukkan pernyataan “cout” ke dalam konstruktor “my_derived()” ini. Di bawahnya, kita membangun sebuah fungsi yang disebut 'show' di mana kita menggunakan 'cout' sekali lagi.



Sekarang, setelah memanggil “main()”, kita membuat pointer dari kelas dasar dengan nama “my_ptr” dan juga membuat objek dari kelas turunannya yaitu “Obj_d”. Setelah ini, kami menetapkan alamat “Obj_d” ke “my_ptr”. Kemudian, kita memanggil fungsi “show()” melalui “my_ptr”.



Kode 1:





#termasuk
menggunakan ruang nama std ;
kelas basis_saya
{
publik :
maya basis_saya ( )
{
cout << 'Ini kelas dasarku' << akhir ;
}
ruang kosong menunjukkan ( )
{
cout << 'fungsi pertunjukan kelas dasar' << akhir ;
}
} ;
kelas turunan_saya : publik basis_saya
{
publik :
turunan_saya ( )
{
cout << 'Ini kelas turunanku' << akhir ;
}
ruang kosong menunjukkan ( )
{
cout << 'fungsi pertunjukan dari kelas turunan' < menunjukkan ( ) ;
}

Keluaran:
Di sini, muncul pesan kesalahan yang mengatakan bahwa konstruktor tidak dapat dideklarasikan virtual dalam pemrograman C++. Jadi, kita dapat melihat bahwa C++ tidak mengizinkan kita membuat konstruktor virtual tetapi kita dapat membuat destruktor virtual.



Contoh 2:

Mari selesaikan masalah sebelumnya dan buat destruktor virtual dalam kode ini. Setelah mendeklarasikan kelas “new_base”, kita menempatkan konstruktor “public” di mana kita membuat destruktor virtual dengan menambahkan “virtual ~” dengan “new_base”. Kami memasukkan pernyataan 'cout' ke dalam destruktor virtual ini. Di bawahnya, kita membuat fungsi bernama 'show' yang menggunakan 'cout'. Selanjutnya, kita membuat kelas turunan yaitu “new_derived” dari kelas dasar “new_base” ini dan membuat destruktor “new_derived()” di kolom “public”. Destruktor “new_derived()” ini sekarang memiliki pernyataan “cout” yang ditambahkan ke dalamnya.

Di bawahnya, kita membuat fungsi bernama “show” yang menggunakan pernyataan “cout” lagi. Setelah memanggil fungsi “main()”, sekarang kita menghasilkan objek kelas turunan “obj_d” serta pointer dari kelas dasar bernama “ptr1”. Setelah itu, kita berikan alamat “obj_d” ke “ptr1”. Selanjutnya, metode “show()” dipanggil menggunakan “ptr1”.

Kode 2:

#termasuk
menggunakan ruang nama std ;
kelas basis_baru
{
publik :
maya ~basis_baru ( )
{
cout << 'Destruktor kelas dasar ada di sini' << akhir ;
}
ruang kosong menunjukkan ( )
{
cout << 'Fungsi pertunjukan dari kelas dasar' << akhir ;
}
} ;
kelas turunan_baru : publik basis_baru
{
publik :
~turunan_baru ( )
{
cout << 'Destruktor kelas turunan ada di sini' << akhir ;
}
ruang kosong menunjukkan ( )
{
cout << 'Fungsi pertunjukan dari kelas dasar' < menunjukkan ( ) ;
}

Keluaran:
Program ini menggunakan objek penunjuk “new_base” yang menunjuk ke kelas turunan “obj_d”. Oleh karena itu, ia memanggil metode “show()” dari kelas “new_base” terlebih dahulu. Kemudian, ia memanggil metode “~new_derived()” dari kelas “new_derived” dan menampilkan “~new_base” dari kelas dasar.

Contoh 3:

Berikut kode lain untuk menghasilkan konstruktor “virtual”. Setelah memasukkan namespace “iostream” dan “std”, kami menghasilkan kelas “B”. Di bawah ini, kita membuat konstruktor 'publik' yaitu 'B()' dan kemudian menghasilkan 'cout'. Fungsi konstruktor dan destruktor didefinisikan dengan memanfaatkan penentu akses “publik” yang dapat dipanggil oleh objek mana pun di kelas.

Sekarang, kita juga membuat destruktor “~B()” dari kelas dasar ini di mana kita menggunakan “cout” lagi. Kemudian, kita membuat kelas “D” yang merupakan kelas turunan dari kelas dasar “B” dan menempatkan “publik” di sini. Di dalam “publik” ini, kita membuat konstruktor dan juga destruktor dari kelas turunan dengan nama “D()” dan “~D”. Keduanya mengandung “cout” di dalamnya. Sekarang, kita memiliki fungsi “main()”. Setelah memanggil fungsi ini, kami membuat objek penunjuk kelas dasar.

Kemudian, kami menggunakan kata kunci “hapus” dan menempatkan “base_ptr” di sini. Dalam hal ini, ruang destruktor dihapus dengan memanggil objek penunjuk kelas dasar.

Kode 3:

#termasuk
menggunakan ruang nama std ;
kelas B
{
publik :
B ( )
{
cout << 'Konstruktor kelas Dasar' << akhir ;
}
~B ( )
{
cout << 'Penghancur kelas Dasar' << akhir ;
}
} ;

kelas D : publik B
{
publik :
D ( )
{
cout << 'Konstruktor kelas Turunan' << akhir ;
}
~D ( )
{
cout << 'Penghancur kelas Turunan' << akhir ;
}
} ;
ke dalam utama ( )
{
B * dasar_ptr = baru D ;
menghapus dasar_ptr ;
}

Keluaran:
Hasilnya menunjukkan bahwa ia menggunakan objek pointer yang menunjuk ke kelas “B” di fungsi utama. Oleh karena itu, ia memanggil “konstruktor()” dari kelas “B” terlebih dahulu. Kemudian, ia memanggil “konstruktor()” dari kelas “D”. Objek penunjuk yang dipegang oleh destruktor kelas “B” dan “D” kemudian dihapus. Tanpa memanggil destruktor kelas “D” dalam program, penunjuk kelas “B” hanya menghilangkan destruktor kelas “B”. Akibatnya, memori program menjadi rusak.

Kesimpulan

Kami membahas konsep 'Konstruksi virtual' dalam pemrograman C++. Kita telah mengetahui bahwa kita tidak dapat membuat konstruktor virtual di C++, namun kita dapat membuat destruktor virtual dalam kode kita. Di sini, kami menunjukkan apa yang terjadi ketika kami membuat konstruktor virtual dalam pemrograman C++ dan cara kerja destruktor virtual dalam kode kami. Kita belajar bahwa konstruktor tidak boleh virtual, tapi kita bisa menghasilkan destruktor virtual di kelas kita. Kami mendemonstrasikan beberapa contoh dan menjelaskan kode-kode ini secara menyeluruh dalam panduan ini.