Raqamli texnologiyalar fakulteti dasturiy injiniring yo’nalishi


Avlod sinfiga yangi funksiyalar qo’shish



Download 1,57 Mb.
bet37/81
Sana23.06.2022
Hajmi1,57 Mb.
#695199
1   ...   33   34   35   36   37   38   39   40   ...   81
Bog'liq
Dasturiy injiniring Dasturlash 2-4

Avlod sinfiga yangi funksiyalar qo’shish. Yuqoridagi misolda bizda ajdod-sinfi uchun manba kodiga kirish imkonimiz bor, agar xohlasak, to'g'ridan-to'g'ri ajdod-sinfiga yangi funksiya qo'shishimiz mumkin.
Ba'zida ajdod sinfiga kirishimiz mumkin, lekin biz uni o'zgartirishni xohlamaymiz. Masalan, biz faqat uchinchi tomon sotuvchisidan kod kutubxonasini sotib oldik, ammo bizga qo'shimcha funksiyalar kerak. Biz uni kutubxonaning manba kodiga qo'shishimiz mumkin, ammo bu eng yaxshi yechim bo'lmaydi. Yangilanish kelsa nima bo'ladi? Yangilashdan so'ng biz barcha kodni yana qo'lda ko'chirishimiz kerak bo'ladi, bu vaqt talab etadi va qo'shimcha ravishda yangilashdan so'ng bizning eski kodimiz kutubxona kodi bilan ishlamasligi xavfi mavjud.
Ajdod sinfini o'zgartirish mumkin bo'lmagan holatlar ham mavjud. Misol uchun, biz C++ standart kutubxonasining bir qismi bo'lgan kodni o'zgartira olmaymiz. Ammo biz ushbu kutubxonadan sinflarni meros qilib olishimiz va keyin avlod sinflarimizga kerakli funksiyalarni qo'shishimiz mumkin. Xuddi shu narsa bizga sarlavha fayllari taqdim etiladigan uchinchi tomon kutubxonalari uchun ham amal qiladi, lekin kod oldindan kompilyatsiya qilinadi.
Qanday bo'lmasin, eng yaxshi yechim - o'z ajdod sinfingizni yozish va avlod sinflarimizga kerak bo'lgan funksiyalarni qo'shish.
Parent sinfining bir nyuansi shundaki, boshqa obyektlar m_value ga kirishlari mumkin. Biz buni Parent sinfiga kirish funksiyalarini qo'shish orqali tuzatishimiz mumkin, ammo misol uchun, Child sinfiga getter qo'shamiz. m_value Parent sinfida protected deb e'lon qilinganligi sababli, Child unga to'g'ridan-to'g'ri kirish huquqiga ega.
Avlod sinfiga yangi funksiya qo'shish odatdagidek amalga oshiriladi:

class Child: public Parent


{
public:
Child(int value)
: Parent(value)
{
}
int getValue() { return m_value; }
};

Endi tashqaridan boshqa obyektlar m_value ga kirish uchun Child sinfining obyekti orqali getValue () ga murojaat qilishlari mumkin bo'ladi:


int main()


{
Child child(7);
cout<<"Avlod "<return 0;
}

Ko'rinib turibdiki, Parent sinfi obyektlari Child sinfida getValue () metodiga kirish huquqiga ega emas. Quyidagilar ishlamaydi:


int main()
{
Parent parent(7);
cout <<"Parent" << parent.getValue() << " qiymatiga ega"<return 0;
}

Buning sababi, Parent sinfida getValue () metodi mavjud emas. getValue () metodi Child sinfiga tegishli. Avlod ajdodning merosxo’ri bo'lgani uchun, avlod ajdod a'zolariga kirish huquqiga ega, Ajdod esa avlod sinfidagi hech narsadan foydalana olmaydi.




1-misol.

#include


#include
class Person
{
public:
Person(std::string n, int a)
{
name = n; age = a;
}
void display()
{
std::cout << "Name: " << name << "\tAge: " << age << std::endl;
}
protected:
std::string name;
private:
int age;
};
class Employee : public Person
{
public:
Employee(std::string n, int a, std::string c):Person(n, a)
{
company = c;
}
void showEmployeeName()
{
std::cout << "Employee Name: " << name << std::endl;
}
private:
std::string company;
};
int main()
{
Person tom("Tom", 23);
// tom.name = "Tommy"; ошибка
Employee bob("Bob", 31, "Microsoft");
// bob.name = "Bob Tompson"; ошибка
bob.showEmployeeName();
return 0;
}



Download 1,57 Mb.

Do'stlaringiz bilan baham:
1   ...   33   34   35   36   37   38   39   40   ...   81




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish