cout << dogs[iii].getName() << dogs[iii].speak() <<<< '\n';
return 0;}
Endi tasavvur qiling-a, bizda 30 xil turdagi hayvonlar bor. Biz 30 ta massiv yaratishimiz kerak edi - har bir hayvon turi uchun bittadan!
Biroq, Cat va Dog Animaldan meros qilib olganligi sababli, siz quyidagilarni qilishingiz mumkin:
#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; }
};
#include
int main()
{
Cat matros("Matros"), ivan("Ivan"), martun(MMartunM);
Dog barsik("Barsik"), tolik("Tolik"), tyzik(MTyzikM);
// Cat va Doglar obyektlariga ko << V;
return 0;
}
Bu kompilyatsiya qilish va amalga oshirish borsatkichi borniga speak () metodlari avlodi chaqirishini bildiradi.
Garchi bu usullarning ikkalasi ham kolsa-da, ular bir xil muammoga ega: ajdod sinfining korsatkichlarini avlod sinflari usullarini chaqirishning qandaydir usuli borib chiqdik, ularda ajdod-sinfning korib chiqdik, ularda ajdod sinfning korsatkichi yoki havolasi faqat ajdod metodlarini chaqiradi, avlodni emas. Masalan: #include
class Parent {
public:
const char* getName() { return "Parent; }
};
int main()
{
Child child;
Do'stlaringiz bilan baham: |