Video: Belajar Java #39 - Overload Method / Fungsi 2024
Sebagai pembatas pagar, C ++ mendukung pengikatan awal dan akhir. Setiap bahasa pemrograman tertentu dapat mendukung pengikatan awal atau akhir berdasarkan keinginan para pengembangnya. Bahasa yang lebih tua seperti C cenderung mendukung pengikatan awal saja. Bahasa terbaru seperti Java dan C # hanya mendukung pengikatan yang terlambat.
Anda mungkin terkejut bahwa default untuk C ++ adalah pengikatan awal. Output dari program OverloadOverride seperti yang terlihat adalah sebagai berikut:
Kami di Siswa:: calcTuition Kami di Siswa:: calcTuition Tekan Enter untuk melanjutkan …
Alasannya sederhana, jika sedikit tertanggal. Pertama, C ++ harus bertindak sebanyak C mungkin secara default untuk mempertahankan kompatibilitas ke atas dengan pendahulunya. Kedua, polimorfisme menambahkan sejumlah kecil overhead ke setiap fungsi panggilan baik dalam hal penyimpanan data dan kode yang dibutuhkan untuk melakukan panggilan.
Pendiri C ++ khawatir bahwa overhead tambahan akan digunakan sebagai alasan untuk tidak mengadopsi C ++ sebagai bahasa pilihan sistem, jadi mereka membuat pengiriman awal yang lebih efisien secara default.
Untuk membuat fungsi anggota polimorfik, pemrogram harus menandai fungsinya dengan kata kunci C ++ virtual, seperti yang ditunjukkan pada modifikasi berikut pada deklarasi di OverloadOveride < program: class Student {public: virtual void calcTuition () {cout << "kita di Student:: calcTuition" << endl;}};
Kata kunci
virtual yang memberi tahu C ++ bahwa calcTuition () adalah fungsi anggota polimorfik. Artinya, menyatakan calcTuition () virtual berarti bahwa panggilan ke sana akan terikat terlambat jika ada keraguan mengenai tipe objek run-time yang digunakan oleh calcTuition ().
OverloadOveride dengan calcTuition () yang menyatakan virtual menghasilkan output sebagai berikut: Kami berada di Student:: calcTuition Kami berada di GraduateStudent:: calcTuition Press Enter untuk melanjutkan …
Jika Anda merasa nyaman dengan debugger yang menyertai lingkungan C ++ Anda, Anda benar-benar harus melangkah satu langkah melalui contoh ini. Ini sangat keren untuk melihat program single-step menjadi Student:: calcTuition () pertama kalinya fn () dipanggil tapi masuk ke GraduateStudent:: calcTuition () pada panggilan kedua. Anda tidak dapat benar-benar menghargai polimorfisme sampai Anda mencobanya.