Rumah Kewangan Peribadi Kelas abstrak dan C ++ - dummies

Kelas abstrak dan C ++ - dummies

Video: Pemrograman Berorientasi Objek: Bagian 5 - Inheritance 2024

Video: Pemrograman Berorientasi Objek: Bagian 5 - Inheritance 2024
Anonim

C ++ menyokong terlambat mengikat , iaitu apabila ia menyelesaikan panggilan kaedah berdasarkan waktu lari jenis (atau jenis dinamik) objek sasaran dan bukan jenis yang diisytiharkan (atau jenis statik). Ini ditunjukkan dalam coretan kod C ++ berikut:

# include menggunakan namespace std; kelas Oven {awam: void cook maya () {cout << "memasak dengan ketuhar" << endl;}}; kelas MicrowaveOven: ketuhar awam {awam: maya kekosongan maya () {cout << "memasak dengan ketuhar gelombang mikro" << endl;}}; tidak sahMenyediakan (Ketuhar & ketuhar) {ketuhar. cook ();}

Dalam fungsi prepareMeal (), panggilan ke oven. masak () boleh lulus ke Ketuhar:: cook () atau MicrowaveOven:: cook () bergantung pada waktu larian ("sebenarnya") objek ketuhar yang diluluskan.

Kata kunci maya adalah kritikal di sini. Tanpa itu, kaedah masak () akan terikat lebih awal, berdasarkan jenis masa kompilasi, dan memohon Ketuhar:: cook () setiap kali. Sebaik sahaja diisytiharkan maya dalam kelas Oven, kaedah itu dianggap maya dalam setiap subkelas tetapi tidak menyakitkan untuk mengulangi perisytiharan itu supaya pembaca memahami.

Program mudah berikut menunjukkan prinsip ini dalam praktik:

int utama () {Oven ketuhar; prepareMeal (oven); MicrowaveKetua anda; prepareMeal (mo); memulangkan 0;}

Dalam program ini, panggilan untuk memasak () menghasilkan dua output berbeza bergantung kepada jenis ketuhar:

Memasak dengan ketuhar Memasak dengan ketuhar gelombang mikro

bahawa satu kaedah dalam kelas asas boleh ditakrifkan. Pertimbangkan kes ketuhar lebih berhati-hati. Terdapat beberapa jenis ketuhar yang berbeza - ketuhar konvensional, ketuhar konveksi, dan ketuhar gelombang mikro - tetapi ada yang berpendapat bahawa tidak ada ketuhar sebenar yang tidak termasuk dalam salah satu subkelas ini. Anda mungkin dapat mengatakan bagaimana pelbagai jenis oven menjalankan operasi tukang masak - iaitu, apa yang KonventionalOven:: cook () dan MicrowaveOven:: cook () harus dilakukan boleh ditakrifkan. Ia mungkin tidak mungkin untuk menentukan apa tindakan Oven:: cook () harus dilakukan.

Anda tidak boleh meninggalkan ketuhar:: cook () tidak diisytiharkan dalam bahasa yang diketik kuat seperti C ++. Walau bagaimanapun, anda boleh mengisytiharkan kaedah tetapi tinggalkan tidak dilaksanakan jika tiada pelaksanaan. Satu menggunakan sintaks yang ingin tahu berikut untuk melakukannya:

kelas Ketuhar {public: virtual void cook () = 0;};

Kod ini mengisytiharkan kaedah Oven:: cook () yang terikat lewat tetapi tidak melaksanakan kaedah tersebut. Malah, ia lebih jauh dengan mengatakan bahawa kaedah itu tidak akan dilaksanakan. Dalam C ++, kaedah sedemikian dikatakan murni murni . Pengaturcara C ++ juga menggunakan istilah yang disukai dalam banyak bahasa komputer yang diketik kuat: abstrak .Kelas Oven dikatakan abstrak.

Abstrak mewakili harta yang anda tahu kelas mempunyai tetapi tidak tahu bagaimana untuk melaksanakan dengan jelas dalam kelas semasa.

Kelas adalah abstrak jika ia mengandungi satu atau lebih kaedah murni tulen. Kepentingan ini adalah bahawa anda tidak boleh meniru kelas abstrak. Oleh itu, berikut ini tidak lagi dibenarkan:

int main () {Oven ketuhar; prepareMeal (oven); kembali 0;}

Alasan untuk ini agak mudah: jika anda mencipta Objek kelas Oven dan kemudian cuba memanggil ketuhar. masak (), apa yang harus dilakukan pengkompil?

Pada tahap yang lebih filosofi, ada baiknya untuk mengatakan bahawa ada istilah umum yang disebut Oven yang menggambarkan ketuhar konvensional dan ketuhar gelombang mikro dan ketuhar konveksi. Ketuhar istilah ini adalah konsep biasa kerana ia mengikat kesamaan dalam semua subkelas ini. Tetapi tidak ada contoh ketuhar yang bukan salah satu daripada subkelas Oven.

Subkelas kelas abstrak adalah sendiri abstrak sehingga semua kaedah murni tulen telah diatasi oleh versi tidak abstrak (iaitu konkrit ). Jadi kelas MicrowaveOven dalam potongan kod sebelumnya tidak abstrak - walaupun Oven adalah abstrak - kerana ia menimpa masak () dengan versi konkritnya sendiri.

Perhatikan bahawa tidak ada yang salah dengan fungsi prepareMeal () yang ditakrifkan sebagai berikut:

void prepareMeal (Ketuhar & ketuhar) {ketuhar. masak ();}

Walaupun hujah diisytiharkan sebagai Oven, ia hanya boleh digunakan dengan beberapa subkelas Ketuhar, seperti Ketuhar Ketuhar atau ConventionalOven, yang mana cook () ditakrifkan.

Kelas abstrak dan C ++ - dummies

Pilihan Editor

QuickBooks 2016: Senarai Kod Cukai Jualan, Senarai Kelas dan Senarai Nama Lain -

QuickBooks 2016: Senarai Kod Cukai Jualan, Senarai Kelas dan Senarai Nama Lain -

QuickBooks 2016 menawarkan banyak senarai. Anda mungkin ingin melihat senarai Kod Cukai Jualan, senarai Kelas, dan senarai Nama Lain. Jika anda perlu melihat senarai ini, cuma pilih senarai dari menu Senarai atau pilih Daftar → Senarai Profil Pelanggan & Vendor dan pilih senarai dari submenu yang ...

Perubahan Tarikh cepat - dummies

Perubahan Tarikh cepat - dummies

Ingin memasukkan atau menukar tarikh dalam entri QuickBooks? Memasuki dan mengedit tarikh dalam QuickBooks adalah pantas dan mudah apabila anda menggunakan pintasan keyboard QuickBooks yang sangat berguna ini. QuickBooks Key atau Keystroke Combination Shortcut Results + Next day - Hari Sebelumnya T Hari W Hari Pertama Minggu K Hari terakhir ...

QuickBooks Mematuhi Pesanan Pembelian - dummies

QuickBooks Mematuhi Pesanan Pembelian - dummies

Anda boleh membuat PO QuickBooks walaupun anda memesan barang melalui telefon atau melalui World Wide Web - iaitu, apabila anda tidak meminta barangan secara bertulis. Mengisi pesanan pembelian membolehkan anda menentukan item yang ada pada pesanan dan apabila item tersebut akan tiba. Apa yang anda perlu lakukan ialah bertanya ...

Pilihan Editor

Buat Label dengan Grafik di Word 2016 - dummies

Buat Label dengan Grafik di Word 2016 - dummies

Kata membolehkan anda mencetak helaian label yang serupa, tetapi ia mengandungi hanya teks membosankan. Cuba rempah-rempah dengan menambah warna, fancy, dan pemformatan. Cara terbaik untuk memasak label ialah menambah gambar atau grafik lain. Ikuti langkah berikut: Klik tab Mailings. Dalam kumpulan Buat, klik ...

Cara Mencipta Blok Bangunan AutoTeks dalam Kata 2016 - dummies

Cara Mencipta Blok Bangunan AutoTeks dalam Kata 2016 - dummies

Kata 2016 tidak mempunyai fungsi AutoComplete . Ia telah dikeluarkan beberapa versi yang lalu. Di tempatnya, anda membuat blok bangunan AutoText, yang berfungsi seperti AutoComplete lama. Blok bangunan AutoText ialah pembantu menaip. Anda membuat blok bangunan untuk teks yang sering anda taip, seperti nama, alamat, permintaan maaf, dan sebagainya. ...

Membuat Kad Ucapan di Microsoft Word 2003 - dummies

Membuat Kad Ucapan di Microsoft Word 2003 - dummies

Jika anda ingin membuat sesuatu dalam Word yang hanya akan mempesonakan seseorang, cuba tangan anda pada kad ucapan tersuai. Untuk menyiapkan Word untuk membuat kad ucapan dari satu lembaran kertas bersaiz standard, ikuti langkah-langkah berikut: 1. Pilih Fail -> Persediaan Halaman. 2. Klik tab Margin. 3. Pilih Landskap ...

Pilihan Editor

Cara Menyediakan Pengawal Cari untuk Geocoding dalam App iOS Anda

Cara Menyediakan Pengawal Cari untuk Geocoding dalam App iOS Anda

Anda sudah mempunyai satu teka-teki geocoding di tempat di papan cerita anda untuk apl iOS anda; ini Pengawal Cari yang sesuai bernama. Caranya ialah untuk menambah pengawal peribadi yang akan melaksanakan ciri Cari yang anda mahu. Untuk menambah projek anda, ikuti langkah-langkah berikut: Dalam Navigator Projek, pilih ...

Cara Menyediakan Pengawal Peta di Main_iPad. Storyboard dalam Apl IOS anda - dummies

Cara Menyediakan Pengawal Peta di Main_iPad. Storyboard dalam Apl IOS anda - dummies

Sekali anda mempunyai pengawal paparan peribadi untuk MapController dalam aplikasi iOS anda, anda perlu memberitahu papan cerita iPad untuk memuat pengawal pandangan adat anda dan bukannya UIViewController. Ikuti langkah berikut: Dalam Navigator Projek, pilih Main_iPad. papan cerita dan kemudian pilih Lihat Pengawal di Lihat Pengawal - Adegan Peta dalam Garis Besar Dokumen. ...