Rumah Kewangan Peribadi Kelas abstrak dan C ++ - dummies

Kelas abstrak dan C ++ - dummies

Video: Pemrograman Berorientasi Objek: Bagian 5 - Inheritance 2025

Video: Pemrograman Berorientasi Objek: Bagian 5 - Inheritance 2025
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

Bagaimana Menghubungkan Item Menu ke Kategori di Joomla - dummies

Bagaimana Menghubungkan Item Menu ke Kategori di Joomla - dummies

Untuk artikel yang dikategorikan dalam Joomla untuk dilihat oleh pengguna laman web anda, anda perlu memautkan item menu Joomla anda ke kategori Joomla yang mengandungi artikel yang ingin anda siarkan. Dengan menyambungkan kategori ke item menu, semua artikel dalam kategori boleh didapati melalui item menu yang berkaitan. Untuk membuat ...

Cara Memasang Joomla CMS pada Server Jauh - dummies

Cara Memasang Joomla CMS pada Server Jauh - dummies

Sebaik sahaja anda telah memuatkan fail Joomla yang tidak diturunkan di pelayan jauh dan sediakan MySQL untuk Joomla, anda sudah bersedia untuk memasang Sistem Pengurusan Kandungan Joomla (CMS). Navigasi ke tapak anda di pelayan tuan rumah. Anda melihat halaman pemasangan Joomla pertama. Pilih bahasa. Klik Seterusnya. Semua item dalam pane bahagian atas ...

Cara Membiarkan Pengguna Menguruskan Akaun Sendiri di Joomla - dummies

Cara Membiarkan Pengguna Menguruskan Akaun Sendiri di Joomla - dummies

Walaupun anda boleh mengurus pengguna dari hujung belakang, Joomla menyediakan kemudahan yang baik yang membolehkan pengguna menguruskan diri mereka juga. Anda boleh membuat halaman di mana pengguna boleh mendaftar, log masuk, menetapkan semula kata laluan mereka, diingatkan kata laluan mereka, dan sebagainya. Buat laman pengurusan pengguna Untuk membuat halaman yang membolehkan pengguna mengurus sendiri, anda ...

Pilihan Editor

Pengguna dan Definisi SharePoint berbeza - dummies

Pengguna dan Definisi SharePoint berbeza - dummies

SharePoint mempunyai banyak jenis pengguna yang berbeza, dan bergantung di mana peranan anda sesuai , anda mungkin mempunyai pengalaman yang sangat berbeza dari pengguna SharePoint yang lain. Sebagai contoh, anda mungkin ditugaskan untuk membuat dan mentadbir laman web SharePoint untuk pasukan anda. Dalam kes ini, anda mungkin melihat ke hadapan fungsi yang luas SharePoint ...

Dan Microblog dalam SharePoint - dummies

Dan Microblog dalam SharePoint - dummies

Microblogging dibuat terkenal oleh Twitter. SharePoint 2013 membawa mikroblogging ke dunia korporat. Menggunakan Twitter, anda menghantar mesej ringkas kepada dunia. Anda boleh mengikuti orang lain dan menarik pengikut anda sendiri. Anda menyebut orang lain menggunakan simbol @ yang diikuti dengan nama mereka dan boleh menanda topik menggunakan # ...

Mengeksport Table Akses ke Senarai Dalam Talian SharePoint - dummies

Mengeksport Table Akses ke Senarai Dalam Talian SharePoint - dummies

Jika anda mempunyai meja dalam Akses yang ada pangkalan data yang anda ingin sediakan untuk ahli pasukan anda yang tidak mempunyai aplikasi MS Access 2010, cara terbaik untuk melakukan ini adalah untuk mengeksport jadual tersebut ke dalam senarai SharePoint. Ikuti langkah-langkah berikut: Dari pangkalan data anda, klik kanan pada jadual di ...

Pilihan Editor

Penyediaan aSVAB: Akar - patung

Penyediaan aSVAB: Akar - patung

Menjadi akrab dengan akar untuk ASVAB. Akar adalah kebalikan dari kuasa atau eksponen. Terdapat pelbagai jenis akar tak terhingga. Anda mempunyai akar kuadrat, yang bermaksud "membuang" asas kepada kuasa kedua; akar kubus, yang bermaksud "membuang" asas yang dinaikkan kepada kuasa ketiga; akar yang keempat, untuk ...

ASVAB Penyediaan: Bekerja dengan Perpuluhan - patung

ASVAB Penyediaan: Bekerja dengan Perpuluhan - patung

Anda perlu tahu bagaimana untuk bekerja dengan perpuluhan untuk ASBAB . Perpuluhan adalah kaedah menulis nombor pecahan tanpa menggunakan pengangka dan penyebut. Anda boleh menulis pecahan 7/10 sebagai perpuluhan 0. 7; anda menyebutnya "tujuh persepuluh" atau "titik nol tujuh. "Tempoh atau titik perpuluhan menunjukkan bahawa nombor itu ...

ASVAB Subtest Details - dummies

ASVAB Subtest Details - dummies

Tergantung di mana dan untuk tujuan apa yang anda ambil ujian, anda mungkin menghadapi beberapa versi ASVAB. Versi terkomputer dari ASVAB (CAT-ASVAB) mengandungi sembilan subtest masa yang berasingan. Pada CAT-ASVAB, Maklumat Auto dan Maklumat Kedai dipisahkan kepada dua ujian berbeza, sedangkan mereka digabungkan pada versi kertas. Lihatlah ...