Dasturlash 1 swd 1316 sinf xususiyati va vorislik 12


Ma’lumotlarga murojaat turlari va vorislik


Download 4.84 Mb.
bet3/3
Sana11.09.2023
Hajmi4.84 Mb.
#1676009
1   2   3
Bog'liq
1) 12-mavzu(Vorislik)

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

Misol. private murojaat orqali vorislik

  • 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 {….}

Davomi..

  • 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;
  • }

protected sinf a’zolariga murojaat

  • protected kalit so’zi vorislik mehanizmini 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.

Misol. 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"; } };

Davomi…

  • 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; }

Bir nechta sinflardan voris olish

  • Bir vaqtning o’zida bir nechta sinfdan voris olish mumkin.
  • Masalan, voris sinf derived ikkita base1 va base2 lardan voris olyapti. Quyidagicha formada bir nechta sinfdan voris olish mumkin.
  • class derived : public base-class1, public base-class2, …

Misol. Bittadan ko’p sinflardan voris olish

  • #include
  • using namespace std;
  • class base1 {
  • protected:
  • int x;
  • public:
  • void showx() {
  • cout << x << "\n"; }
  • };
  • class base2 {
  • protected:
  • int y;
  • public:
  • void showy() {
  • cout << y << "\n";}
  • };

Davomi…

  • // ikkita sinfdan voris olinyapti.
  • class derived: public base1, public base2 {
  • public:
  • void set(int i, int j) { x=i; y=j; } };
  • int main(){
  • derived ob;
  • ob.set(10, 20); // voris sinf obyekti
  • ob.showx(); // birinchi (base1) sinf metodi
  • ob.showy(); // ikkinchi (base2) sinf metodi
  • return 0; }

Vorislikda konstruktor va destruktorlar

  • Voris sinf obyekti yaratilganda, voris va asos sinf konstruktor va destruktorlari quyidagi ketma-ketlikda faoliyatda bo’ladi?
  • C++ da, voris sinf obyekti yaratilganda:
    • birinchi, asos sinf konstruktori chaqiriladi.
    • ikkinchi, voris sinf konstruktori chaqiriladi.
    • uchinchi, voris sinf destruktori chaqiriladi.
    • va nihoyat, asos sinf destruktori chaqirilad.

Misol

  • class base {
  • public:
  • base() { cout << "Constructing base\n"; }
  • ~base() { cout << "Destructing base\n"; }
  • };
  • class derived: public base {
  • public:
  • derived() { cout << "Constructing derived\n"; }
  • ~derived() { cout << "Destructing derived\n"; }
  • };

Davomi…

  • int main()
  • {
  • derived ob;
  • // boshqa bironta kodlar ketma-ketligi
  • return 0;
  • }
  • Constructing base
  • Constructing derived
  • Destructing derived
  • Destructing base

Xulosa

  • Vorislik ning 4 ta turi mavjud:
  • public turidagi vorislik.
  • protected turidagi vorislik.
  • private turidagi vorislik.
  • auto turidagi vorislik.
  • auto turidagi vorislik yozilmaydi. Uning o’rniga private olinadi.
  • MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI
  • Mallayev Oybek
  • Usmonqulovich
  • E’TIBORINGIZ UCHUN RAHMAT!

Download 4.84 Mb.

Do'stlaringiz bilan baham:
1   2   3




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