Pembina Maya C++

Pembina Maya C



C++ tidak memudahkan kami untuk membina pembina maya kerana tidak mungkin untuk mengatasi pembina kelas. Jadi, virtualisasi pembina tidak bermakna. Tiada konsep untuk mencipta pembina maya dalam program C++, tetapi kita mungkin mencipta pemusnah maya di sana. Kita juga boleh mentakrifkannya kerana pengaturcaraan pembina dalam C++ tidak boleh dianggap maya kerana apabila pembina kelas dipanggil, memori tidak mengandungi jadual maya yang menunjukkan bahawa tiada penuding maya dicipta. Oleh itu, pembina sepatutnya bukan maya pada setiap masa.

Walau bagaimanapun, pemusnah maya boleh wujud. Di sini, kami akan menunjukkan apa yang berlaku apabila kami mencipta pembina maya dalam C++ serta cara kerja pemusnah maya dan bukannya pembina maya.

Contoh 1:

Mari buat pembina maya dan mulakan kod kami dengan meletakkan fail pengepala 'iostream'. Fail pengepala ini adalah untuk fungsi yang diisytiharkan di dalamnya seperti 'cin' dan 'cout'. Selepas ini, kami menambah ruang nama 'std', jadi kami tidak boleh menambah 'std' ini dengan setiap fungsi dalam kod kami. Selepas ini, kami mencipta kelas yang merupakan kelas asas kod kami dengan nama 'my_base' dan kemudian menambah 'awam' untuk mencipta pembina maya.







Pembina maya dicipta di sini dengan meletakkan kata kunci 'maya'. Di dalam pembina maya ini, kami meletakkan pernyataan 'cout'. Di bawah ini, kami mencipta fungsi bernama 'show' di mana kami menggunakan 'cout' sekali lagi. Selepas ini, kami mencipta kelas terbitan kelas asas ini dengan nama 'my_derived' dan kemudian mewujudkan pembina 'my_derived()' dalam medan 'public'. Kami memasukkan pernyataan 'cout' ke dalam pembina 'my_derived()' ini. Di bawahnya, kami membina fungsi yang dipanggil 'tunjukkan' di mana kami menggunakan 'cout' sekali lagi.



Sekarang, selepas menggunakan 'main()', kami mencipta penunjuk kelas asas dengan nama 'my_ptr' dan juga mencipta objek kelas terbitan iaitu 'Obj_d'. Selepas ini, kami memberikan alamat 'Obj_d' kepada 'my_ptr'. Kemudian, kami memanggil fungsi 'show()' melalui 'my_ptr'.



Kod 1:





#include
menggunakan ruang nama std ;
kelas my_base
{
awam :
maya my_base ( )
{
cout << 'Ini kelas asas saya' << endl ;
}
batal tunjuk ( )
{
cout << 'fungsi pertunjukan kelas asas' << endl ;
}
} ;
kelas my_derived : awam my_base
{
awam :
my_derived ( )
{
cout << 'Ini adalah kelas terbitan saya' << endl ;
}
batal tunjuk ( )
{
cout << 'fungsi tunjukkan kelas terbitan' < tunjuk ( ) ;
}

Pengeluaran:
Di sini, ia menunjukkan mesej ralat yang mengatakan bahawa pembina tidak boleh diisytiharkan maya dalam pengaturcaraan C++. Jadi, kita dapat melihat bahawa C++ tidak membenarkan kita menjana pembina maya tetapi kita mungkin mencipta pemusnah maya.



Contoh 2:

Mari selesaikan masalah sebelumnya dan buat pemusnah maya dalam kod ini. Selepas mengisytiharkan kelas 'new_base', kami meletakkan pembina 'awam' di mana kami mencipta pemusnah maya dengan menambah 'virtual ~' dengan 'new_base'. Kami memasukkan pernyataan 'cout' ke dalam pemusnah maya ini. Di bawahnya, kami membina fungsi yang dipanggil 'show' yang menggunakan 'cout'. Seterusnya, kami membuat kelas terbitan iaitu 'new_derived' daripada kelas asas 'new_base' ini dan membina 'new_derived()'destructor dalam medan 'public'. Pemusnah 'new_derived()' ini kini mempunyai pernyataan 'cout' yang ditambahkan padanya.

Di bawahnya, kami mencipta fungsi yang dipanggil 'tunjukkan' yang menggunakan pernyataan 'cout' sekali lagi. Selepas memanggil fungsi 'main()', kami kini menghasilkan objek kelas terbitan 'obj_d' serta penunjuk kelas asas bernama 'ptr1'. Selepas itu, kami memberikan alamat 'obj_d' kepada 'ptr1'. Seterusnya, kaedah 'show()' digunakan menggunakan 'ptr1'.

Kod 2:

#include
menggunakan ruang nama std ;
kelas new_base
{
awam :
maya ~pangkalan_baharu ( )
{
cout << 'Pemusnah kelas asas ada di sini' << endl ;
}
batal tunjuk ( )
{
cout << 'Fungsi persembahan kelas asas' << endl ;
}
} ;
kelas new_derived : awam pangkalan_baru
{
awam :
~new_derived ( )
{
cout << 'Pemusnah kelas terbitan ada di sini' << endl ;
}
batal tunjuk ( )
{
cout << 'Fungsi persembahan kelas asas' < tunjuk ( ) ;
}

Pengeluaran:
Atur cara ini menggunakan objek penunjuk 'new_base' yang menunjuk ke kelas terbitan 'obj_d'. Oleh itu, ia memanggil kaedah 'show()' bagi kelas 'new_base' terlebih dahulu. Kemudian, ia memanggil kaedah '~new_derived()' bagi kelas 'new_derived' dan memaparkan '~new_base' bagi kelas asas.

Contoh 3:

Berikut ialah kod lain untuk menjana pembina 'maya'. Selepas memasukkan ruang nama 'iostream' dan 'std', kami menjana kelas 'B'. Di bawah ini, kami mencipta pembina 'awam' iaitu 'B()' dan kemudian menjana 'cout'. Fungsi pembina dan pemusnah ditakrifkan dengan menggunakan penentu akses 'awam' di mana mana-mana objek dalam kelas boleh memanggil.

Sekarang, kami juga mencipta '~B()' pemusnah kelas asas ini di mana kami menggunakan 'cout' sekali lagi. Kemudian, kami mencipta kelas 'D' yang merupakan kelas terbitan kelas asas 'B' dan meletakkan 'awam' di sini. Di dalam 'awam' ini, kami mencipta pembina serta pemusnah kelas terbitan dengan nama 'D()' dan '~D', masing-masing. Kedua-duanya mengandungi 'cout' di dalamnya. Sekarang, kita mempunyai fungsi 'utama()'. Selepas memanggil fungsi ini, kami menjana objek penunjuk kelas asas.

Kemudian, kami menggunakan kata kunci 'padam' dan letakkan 'base_ptr' di sini. Dalam kes ini, ruang pemusnah dipadamkan dengan memanggil objek penunjuk kelas asas.

Kod 3:

#include
menggunakan ruang nama std ;
kelas B
{
awam :
B ( )
{
cout << 'Pembina kelas Asas' << endl ;
}
~B ( )
{
cout << 'Pemusnah kelas Pangkalan' << endl ;
}
} ;

kelas D : awam B
{
awam :
D ( )
{
cout << 'Pembina kelas Terbitan' << endl ;
}
~D ( )
{
cout << 'Pemusnah kelas Terbitan' << endl ;
}
} ;
int utama ( )
{
B * asas_ptr = baru D ;
padam asas_ptr ;
}

Pengeluaran:
Hasilnya menunjukkan bahawa ia menggunakan objek penunjuk yang menunjuk ke kelas 'B' dalam fungsi utama. Oleh itu, ia memanggil 'pembina()' kelas 'B' terlebih dahulu. Kemudian, ia memanggil 'pembina()' kelas 'D'. Objek penunjuk yang dipegang oleh pemusnah kelas 'B' dan 'D' kemudiannya dipadamkan. Tanpa menggunakan pemusnah kelas 'D' dalam program, penunjuk kelas 'B' hanya menghapuskan pemusnah kelas 'B'. Akibatnya, ingatan program rosak.

Kesimpulan

Kami membincangkan konsep 'Pembinaan maya' dalam pengaturcaraan C++. Kami meneroka bahawa kami tidak boleh mencipta pembina maya dalam C++, tetapi kami mungkin mencipta pemusnah maya dalam kod kami. Di sini, kami menunjukkan perkara yang berlaku apabila kami mencipta pembina maya dalam pengaturcaraan C++ dan cara kerja pemusnah maya dalam kod kami. Kami mengetahui bahawa pembina tidak boleh menjadi maya, tetapi kami boleh menjana pemusnah maya dalam kelas kami. Kami menunjukkan beberapa contoh dan menerangkan kod ini dengan teliti dalam panduan ini.