Virtual bazaviy sinflar


Download 143.71 Kb.
bet2/5
Sana09.04.2023
Hajmi143.71 Kb.
#1347011
1   2   3   4   5
Bog'liq
mustaqil Ish

protected – himoyalangan;
private – xususiy;
public – umumiy;
Himoyalangan komponentalardan sinflar ierarxiyasi qurilganda foydalaniladi.
Oddiy holda protected spesifikatori private spesifikatoriga ekvivalentdir.Umumiy
ya’ni public turidagi komponentalarga dasturning ixtiyoriy joyida murojaat qilinishi mumkin. Xususiy ya’ni private turidagi komponentalarga sinf tashqarisidan murojaat qilish mumkin emas. Agar sinflar struct xizmatchi so’zi bilan kiritilgan bo’lsa, uning hamma komponentalari umumiy public bo’ladi, lekin bu huquqni murojaat spesifikatorlari yordamida o’zgartirish mumkin.
Agar sinf class xizmatchi so’zi orqali ta’riflangan bo’lsa, uning hamma komponentalari xususiy bo’ladi. Lekin bu huquqni murojaat spesifikatorlari
yordamida o’zgartirish mumkin.
Quyidagi misolda employee, sinfi kiritilgan:
class employee
{
public:
long employee_id;
float salary;
void show_employee(void)
{
cout<<"Nomer: "<cout<<"Maosh: "<};
};
Bu sinf ikki o’zgaruvchi va bitta funksiya-elementga ega.

2. VIRTUAL BAZAVIY SINFLAR
Virtual tayanch sinflar virtual merosda bir nechta merosdan foydalanganda meros iyearxiyasida paydo bo'ladigan berilgan sinfning bir nechta "nasllari" ning oldini olish uchun ishlatiladi.
Virtual bazaviy sinflarga ehtiyoj:
Bizda bitta A sinfga ega bo'lgan vaziyatni ko'rib chiqaylik. Bu A sinfi boshqa ikkita B va C sinflariga meros bo'lib o'tadi. Bu ikkala sinf quyidagi rasmda ko'rsatilganidek, yangi D sinfida boshqasiga meros bo'lib o'tadi.

Rasmdan ko'rinib turibdiki, A sinfining ma'lumotlar a'zolari/funksiyasi D sinfiga ikki marta meros bo'lib o'tadi. Birinchisi B sinfi, ikkinchisi C sinfi orqali. A sinfining har qanday ma'lumotlariga/funksiya a'zosiga D sinfi ob'ekti kirishi bilan, Qaysi ma'lumotlar/funksiya a'zosi chaqirilishi borasida noaniqlik yuzaga keladi? Biri B orqali yoki ikkinchisi C orqali meros bo'lib o'tadi. Bu kompilyatorni chalkashtirib yuboradi va u xatoni ko'rsatadi.
#include
using namespace std;
class A {
public:
void show()
{
cout << "Hello form A \n";
}
};


class B : public A {
};


class C : public A {
};


class D : public B, public C {
};


int main()
{
D object;
object.show();
}
Natija :


prog.cpp: In function 'int main()': prog.cpp:29:9: error: request for member 'show' is ambiguous object.show(); ^ prog.cpp:8:8: note: candidates are: void A::show() void show() ^ prog.cpp:8:8: note: void A::show() Bu muammoni qanday hal qilish mumkin? A sinfi B sinfida ham, C sinfida ham meros bo'lganda ushbu noaniqlikni bartaraf etish uchun virtual kalit so'zni quyidagicha joylashtirish orqali u virtual tayanch sinf sifatida e'lon qilinadi: 1- USUL :
class B : virtual public A
{
};


Download 143.71 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5




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