Ma’lumotlarga murojaat turlari va vorislik
Murojaat turlari
|
public
|
protected
|
private
|
Asos sinf
|
yes
|
yes
|
yes
|
Voris sinf
|
yes
|
yes
|
no
|
Boshqa sinf (yoki main funksiya)
|
yes
|
no
|
no
|
private murojaat turi orqali voris sinfni yaratishga misol.
class base {
int i, j;
public:
void set(int a, int b) { i=a; j=b; }
void show() { cout << i << " " << j << "\n";}
};
// asos sinfning public a’zolari, voris sinfda private huquqiga o’tadi.
class derived : private base {….}
int main()
{
derived ob(3);
ob.set(1, 2); // error, set() metodiga ruxsat yo’q
ob.show(); // error, show() metodiga ruxsat yo’q
return 0;
}
Vorislik va sinfning himoyalangan (protected) a’zolari\
Protected kalit so’zi vorislik mexanizmini tashkil qilish uchun ishlatiladi va qulaylik vujudga keltiradi.
Asos sinfning private a’zolariga dasturning boshqa bir qismi (misol uchun boshqa sinf yoki main() funksiyasi) yoki voris sinf tomonidan to’g’ridan to’g’ri murojaat mavjud emas
Lekin asos sinfning protected a’zolari, boshqa sinf yoki main() funksiya uchun yopiq bo’ganiga qaramasdan, voris sinf tomonidan murojaat mavjuddir.
Asos sinfning protected a’zolari
class base {
protected:
int i, j; // asos sinf uchun private, lekin voris sinf uchun ochiq
public:
void set(int a, int b) { i=a; j=b; }
void show() { cout << i << " " << j << "\n"; }
};
class derived : public base {
int k;
public:
void setk() { k=i*j; } // i va j voris sinf uchun ochiq
void showk() { cout << k << "\n"; }
};
int main()
{
derived ob;
ob.set(2, 3); // OK, voris sinf uchun ochiq, chunki public
ob.show(); // OK, voris sinf uchun ochiq, chunki public
ob.setk(); ob.showk(); // voris sinf metodi, murojaat turi public, demak ochiq
return 0;
}
Voris olish turlari
// public (umumiy) vorislik
class derived1: public Base{…};
// private (xususiy) vorislik
class derived2: private Base{….};
// protected (himoyalangan) vorislik
class derived3: protected Base{….};
// default (oddiy-xususiy) vorislik
class derived4: Base{….};
Public vorislik:
Bunda asos sinfning public a’zolari voris sinfning ham public a’zolari va asos sinfning protected a’zolari voris sinfning protected a’zolariga aylanadi.
Lekin asos sinfning private a’zolari voris sinf uchun yopiqligicha qoladi.
Protected vorislik:
Bunda asos sinfning public va protected a’zolari voris sinf uchun protected a’zo bo’lib o’tadi.
Private vorislik:
Bunda asos sinfning public va protected a’zolari voris sinfning private a’zosiga ayanadi.
Asos sinf konstruktoriga qiymat jo’natish
Quyidagi forma orqali asos sinf konstruktoriga parametr orqali qiymat jo’natishimiz mumkin:
voris-sinf-konstruktori(arg-lar) : asos-sinf1(arg-lar),
asos-sinf2(arg-lar),
// ...
asos-sinfN(arg-lar)
{
// voris sinf konstruktor tanasi
}
Asos sinf konstruktoriga qiymat jo’natish
class base {
protected: int i;
public:
base(int x) { i=x; }
};
class derived: public base {
int j;
public:
derived(int x, int y): base(y) // Asos sinf konstruktorini chaqirish
{ j=x; }
void show() { cout << i << " " << j << "\n"; }
};
derived ob(3, 4);
ob.show(); // natija 4 3
Do'stlaringiz bilan baham: |