Mavzu: Ko’rsatkichlar, havolalar. Ularning avlod-ajdod sinfda qo’llanilishi


Download 463.91 Kb.
Pdf ko'rish
bet4/4
Sana11.02.2023
Hajmi463.91 Kb.
#1189856
1   2   3   4
Bog'liq
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:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling