Mavzu: Ko’rsatkichlar, havolalar. Ularning avlod-ajdod sinfda qo’llanilishi
Download 463.91 Kb. Pdf ko'rish
|
1-ma\'ruza
7-listing
#include #include using namespace std; class Animal { protected: string m_name; // Ushbu konstruktorni himoyalangan qilamiz, //chunki foydalanuvchilarning Animal sinfi obyektlarini toʻgʻridan-toʻgʻri //yaratishini xohlamaymiz, lekin avlod sinflariga kirish huquqiga ega boʻlishini xohlaymiz. Animal(string name) { m_name = name; } public: string getName() { return m_name; } const char* speak() { return "???"; } }; class Cat: public Animal { public: Cat(string name) : Animal(name) { } const char* speak() { return "Meow"; } }; class Dog: public Animal { public: Dog(string name) : Animal(name) { } const char* speak() { return "Woof"; } }; #include int main() { Cat matros("Matros"), ivan("Ivan"), martun("Martun"); Dog barsik("Barsik"), tolik("Tolik"), tyzik("Tyzik"); // Cat va Doglar obyektlariga koʻrsatkichlar qatorini yaratish Animal *animals[] = { &matros, &ivan, &martun, &barsik, &tolik, &tyzik}; for (int i=0; i < 6; i++) cout << animals[i]->getName() << " "<< animals[i]->speak()<<" deydi" << '\n'; return 0; } 8-listingda berilgan dastur kompilyatsiya qilinsada, lekin, Animal massivining har bir elementi Animal koʻrsatkichi boʻlganligi sababli animals[i]->speak() chaqiruvi Animal::speak() oʻrniga speak() metodlari avlodi chaqirishini bildiradi. Garchi bu metodlarning ikkalasi ham koʻp vaqt va energiyani tejashga yordam berishi mumkin boʻlsa-da, ular bir xil muammoga ega: ajdod sinfining koʻrsatkichi yoki havolasi avlodni emas, balki funksiyaning asosiy variantini chaqiradi. Download 463.91 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling