Video: Virtual Functions & Abstract Classes in C++ | C++ Programming Tutorials 2024
Kelas abstrak di C ++ adalah kelas dengan satu atau lebih fungsi virtual murni. Fungsi virtual murni adalah fungsi anggota virtual yang ditandai tidak memiliki implementasi. Kemungkinan besar tidak ada implementasi karena tidak ada implementasi yang mungkin dilakukan dengan informasi yang diberikan di kelas, termasuk kelas dasar apapun.
Fungsi virtual non-murni konvensional yang run-of-the-mill dikenal sebagai fungsi beton (perhatikan bahwa fungsi beton mungkin bersifat virtual - sayangnya, C ++ menggunakan istilah ini untuk berarti polimorfik.
Sintaks untuk mendeklarasikan fungsi virtual murni ditunjukkan di kelas berikut Akun:
// Akun - kelas ini adalah kelas kelas abstrak {public: Account (unsigned accNo, double initialBalance = 0. 0); // fungsi akses unsigned int accountNo (); double acntBalance (); static int noAccounts (); // fungsi transaksi void deposit (double amount); // berikut adalah fungsi virtual virtual virtual void withdrawal (double amount) = 0; protected: // simpan akun dalam linked list sehingga tidak ada batasan // jumlah akun hit int int; // jumlah akun unsigned accountNumber; double balance;};
The = 0 setelah deklarasi penarikan () menunjukkan bahwa programmer tidak bermaksud untuk mendefinisikan fungsi ini. The declarati on adalah tempat untuk subclass. Subclass dari Account diharapkan dapat menggantikan fungsi ini dengan fungsi beton. Pemrogram harus memberikan implementasi untuk setiap fungsi anggota tidak dinyatakan murni virtual.
Beberapa pemrogram menganggap notasi ini konyol. Tapi di sini untuk tinggal, jadi Anda hanya perlu belajar untuk hidup dengan itu. Ada alasannya, kalau bukan sekedar pembenaran, untuk notasi ini. Setiap fungsi virtual harus memiliki entri di meja khusus.
Entri ini berisi alamat fungsi. Agaknya, setidaknya pada satu waktu, entri untuk fungsi virtual murni adalah 0. Bagaimanapun juga, ini adalah sintaks yang Anda terjebak sekarang.
Kelas abstrak tidak dapat di instal dengan objek; Artinya, Anda tidak dapat membuat objek dari kelas abstrak. Misalnya, deklarasi berikut ini tidak sah:
void fn () {// nyatakan akun dengan 100 dolar Account acnt (1234, 100. 00); // ini bukan aksen legal. penarikan (50); // apa yang akan Anda harapkan} // panggilan ini untuk dilakukan?
Jika deklarasi diizinkan, objek yang dihasilkan tidak lengkap, kurang dalam beberapa kemampuan. Misalnya, apa yang harus dilakukan panggilan sebelumnya? Ingat, tidak ada Akun:: withdrawal () .
Kelas abstrak berfungsi sebagai kelas dasar untuk kelas lainnya. Akun berisi semua properti yang terkait dengan akun bank umum. Anda dapat membuat jenis rekening bank lain dengan mewarisi dari Akun.
Istilah teknisnya adalah instantiate . Anda mengatakan bahwa kelas Account tidak dapat di instantiasikan dengan objek atau objek yang diberikan memberi instantiates kelas Tabungan .