#include
#include
using namespace std;
class Animal
{
protected:
string m_name;
// Biz ushbu konstruktorni himoyalangan qilamiz,
//chunki biz foydalanuvchilarning Animal sinfi obyektlarini to'g'ridan-to'g'ri //yaratishini xohlamaymiz, lekin biz avlod sinflariga kirish huquqiga ega bo; }
int main()
{
Cat cat();
cout << << cat.getName() << << cat.speak() << <<'\nBarsikKuchukning ismi va u deydi\n';
Animal *pAnimal = &cat;
cout << << pAnimal->getName() << << pAnimal->speak() << <
return 0;
}
Xuddi shu muammoni bu yerda korsatkich bora oladi. Demak, pAnimal-> speak () ni Hayvon :: speak(), Dog:: Speak () yoki Cat :: speak () emas, chaqiradi.
KoYuqoridagi misollar gektdan foydalanishim mumkin borsatkichidan yoki avlod sinf ob Buning bir qancha yaxshi sabablari bor ekan.
Birinchidan, siz hayvonning nomi va tovushini chiqaradigan funksiyani yozmoqchisiz deylik. Ajdod-sinfga ko deydi\n deydi\nshsangiz, u holda siz ushbu turdagi hayvon uchun yangi funktsiya yozishingiz kerak boqotishdir.
Biroq, mushuk va it hayvonni meros qilib olganligi sababli, mushuk va itning Animal qismi bor, shuning uchun biz quyidagilarni qilishimiz mumkin:
int main()
{
Cat cats[] = { Cat(), Cat("Ivan"), Cat() };
Dog dogs[] = { Dog(), Dog(), Dog(MTyzikM) };
for (int iii=0; iii < 3; ++iii)
cout << cats[iii].getName() << cats[iii].speak() <<<< '\n';
for (int iii=0; iii < 3; ++iii)
Do'stlaringiz bilan baham: |