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

Meningkatkan Rancangan Navigasi Blog - dummies

Meningkatkan Rancangan Navigasi Blog - dummies

Reka bentuk navigasi hebat untuk blog anda meningkatkan pengalaman pembaca. Reka bentuk navigasi buruk di blog mengecewakan pengunjung yang ingin mencari catatan blog tertentu dengan cepat, atau membaca siaran berkaitan atau yang serupa. Mengharapkan keperluan pelawat anda dengan memikirkan blog anda seperti kedai, dan jawatan blog anda seperti produk: Catatan popular dan terkini: ...

Meningkatkan Pengalaman Pengguna Blog dengan Plugin - dummies

Meningkatkan Pengalaman Pengguna Blog dengan Plugin - dummies

Beberapa teknologi yang berbeza dapat meningkatkan blog anda . Plug-in, widget, dan alat semua membuat ciri-ciri baru, integrasi, dan penambahan mudah untuk dibungkus dan diedarkan. Teknologi-teknologi ini berkembang sepanjang masa, tetapi untuk mendapatkan blog anda dan berjalan, berikut adalah beberapa pilihan terbaik semasa untuk pelbagai tujuan. Widget / Name Plugin ...

Meningkatkan Tajuk Blog Anda dan Reka Bentuk Tagline untuk SEO - patung

Meningkatkan Tajuk Blog Anda dan Reka Bentuk Tagline untuk SEO - patung

Tag tajuk blog anda dan tagline memberi enjin carian penerangan kandungan blog anda. Reka bentuk blog SEO yang berkesan bermakna memastikan jawatan blog enjin carian yang layak dan halaman mempunyai tag tajuk mereka sendiri dan bahawa slogan setiap halaman penuh dengan kata kunci yang berkaitan.

Pilihan Editor

Office 2013 Save As Dialog Box - dummies

Office 2013 Save As Dialog Box - dummies

Office 2013 menggunakan SkyDrive pengguna Windows semasa sebagai penyimpanan default lokasi. SkyDrive adalah kawasan penyimpanan dalam talian berasaskan awan yang dihoskan oleh Microsoft. Sesiapa yang mendaftarkan perkhidmatan, atau yang log masuk ke Windows 8 dengan Microsoft ID, diberikan sejumlah ruang penyimpanan percuma, dan boleh membeli lebih banyak. Cloud adalah ...

Unclutter Peti Masuk Outlook anda dengan Clutter - dummies

Unclutter Peti Masuk Outlook anda dengan Clutter - dummies

Mahu aplikasi e-mel yang juga pembaca minda? Keinginan anda diberikan. Anda boleh mengucapkan terima kasih kepada Graph Office dan Clutter, ciri baru dalam Outlook. Clutter menggunakan teknologi di sebalik Grafik Pejabat untuk menganalisis isyarat yang anda hantar apabila anda mengambil tindakan terhadap e-mel anda. Sebagai contoh, jika anda cenderung untuk mengabaikan e-mel daripada ...

Pilihan Editor

Elakkan Berat Berat Ketika Menguatkuasakan Garis Panduan Komuniti Dalam Talian - dummies

Elakkan Berat Berat Ketika Menguatkuasakan Garis Panduan Komuniti Dalam Talian - dummies

Hanya kerana anda mempunyai kuasa untuk berbuat demikian tidak bermakna bahawa semua masalah komuniti dalam talian memerlukan amaran dan banner. Ya, anda ingin menonjolkan keadaan negatif di dalam tunas, tetapi tidak, anda tidak mahu mendapat sedikit tentangnya sama ada. Kadang-kadang membiarkan slaid isu baik-baik saja. Sebagai pengurus komuniti, tugas anda untuk mengetahui ...

Elakkan Peluang Yang Berisiko Reputasi Blog Anda - dummies

Elakkan Peluang Yang Berisiko Reputasi Blog Anda - dummies

Apabila anda mengaitkan blog ibu anda dan jenama peribadi anda produk atau jenama syarikat, tidak dapat dielakkan bahawa anda akan menggosok satu sama lain. Suka atau tidak, anda boleh dan boleh dikaitkan dengan jenama itu. Tidak semua syarikat yang ingin memberi anda produk percuma adalah yang anda mahu ...

Peruntukkan Peranan ke Font di Laman Blog Anda - dummies

Peruntukkan Peranan ke Font di Laman Blog Anda - dummies

Apabila anda menetapkan peranan ke fon anda, membantu memastikan reka bentuk blog anda kelihatan profesional. Menjaga tujuan fon anda jelas menjadikan reka bentuk navigasi blog anda lebih berkesan dan reka bentuk keseluruhan anda lebih mudah di mata. Selepas anda memilih dua atau tiga fon pelengkap yang juga mempunyai perbezaan yang cukup untuk menonjol dari satu sama lain (lihat ...