Bazaviy sinf a'zolariga murojaatni boshqarish



Yüklə 261,55 Kb.
səhifə1/5
tarix23.12.2023
ölçüsü261,55 Kb.
#154797
  1   2   3   4   5
13-15-mavzu


Bazaviy sinf a'zolariga murojaatni boshqarish
Meros ob'ektga yo'naltirilgan dasturlarning uchta asosiy printsiplaridan biridir, chunki ierarxik tasniflarning yaratilishi mumkin. Merosdan foydalanib, siz ko'plab tegishli elementlarga xos bo'lgan xususiyatlarni aniqlaydigan umumiy sinfni yaratishingiz mumkin. Keyinchalik ushbu sinf boshqa har birining o'ziga xos xususiyatlari qo'shilishi bilan boshqa ixtisoslashtirilgan sinflar tomonidan meros qilib olinishi mumkin.
C ++ ning standart terminologiyasida meros qilib olingan, u asosiy deb ataladi. Asosiy sinfni meros qilib oladigan sinf hosila deb ataladi. Differentsial sinf asosiy hosilalar sinf sifatida ishlatilishi mumkin. Shu tarzda, ko'pchilik sinflar ierarxiyasi qurilmoqda.
Meros tushunchasi
Asosiy sinf hosila sinf tomonidan meros bo'lib o'tadi.
C ++ tilidagi til meros mexanizmini qo'llab-quvvatlaydi, bu sinf deklaratsiyasida boshqa sinfni joylashtirishga imkon beradi. Buning uchun asosiy klassi lotin e'lon qilinganda o'rnatiladi. Misoldan boshlash yaxshidir. Eng asosiy ma'noda yo'l transport vositasini aniqlaydigan avtoulovni ko'rib chiqing. Uning ma'lumotlari a'zolari sizga g'ildirakni tashishga olib keladigan yo'lovchilar va raqamlarni saqlash imkonini beradi.
Sinf avtoulov {int kol; int pass;
Ommaviy:
Bo'sh set_kol (int raqam) {kol = raqam; }
get_kol () {Kolni qaytarish; }
Bo'sh set_pass (int raqam) {pass = raqam; }
Int_ptass () {qaytarish o'tishi; }}
Avtoulovlarning o'ziga xos turlarini aniqlash uchun yo'l transport vositasining bu umumiy ta'rifidan foydalanish mumkin. Masalan, avtopes sinfini meros qilib, grus sinfi (yuk mashinalari) yaratilgan.
Klass grus: ommabop avtomobil {int yuk;
Ommaviy:
Bo'sh set_cargo (Int hajmi) {yuk = hajmi; }
Int_cargo () {qaytish yuklari; }
Bo'sh namoyon (); }
Grus sinfining avtotransport vositasi grus sinfi avtoulovning barcha tarkibini meros qilib olishini anglatadi. Yuk a'zolarini qo'llab-quvvatlash uchun zarur bo'lgan yuklarning umumiy ma'lumotlari, shuningdek a'zo funktsiyalari sinf avtoulovining gruslari tarkibiga qo'shadi.
Avtoulovga qanday meros qilib berilganligiga e'tibor bering. Merosni ta'minlashning umumiy formati quyidagi turlarga ega.
Sinfentary Class nomi: Baz_lace kirish nomi {
Yangi sinf tanasi}
Bu erda elementga kirish majburiy emas. Agar kerak bo'lsa, uni maxsus, shaxsiy yoki himoyalangan holda ifodalash mumkin. Ushbu bobda siz ushbu kirish parametrlari haqida ko'proq ma'lumotga ega bo'lasiz. Bu orada, barcha meros bo'lib o'tadigan sinflarning ta'rifida biz jamoat tartibini ishlatamiz. Bu shuni anglatadiki, barcha jamoatchilikning barcha a'zolari, shuningdek, hosila sinfining ommaviy sinfi bo'ladi. Shuning uchun, oldingi misolda grus sinf a'zolari go'yo (ushbu funktsiyalar) grus sinfida e'lon qilinganidek, avtoulovlar uchun avtoulovning ochiq funktsiyalari mavjud. Biroq, grus sinfi avtoulovlar jamoasidan foydalana olmaydi. Masalan, grus sinfi uchun Kol ma'lumotlariga ega bo'lish yopiq.
Auto va Legk sinfini yaratish uchun meros mexanizmidan foydalanadigan dasturni ko'rib chiqing.
// sxildt p 353
// merosni namoyish qilish,#include
#include
// Определяем базовый класс транспортных средств,
enum type {car, van, wagon};
class automob {int kol; int pass;
public:
void set_kol(int num) { kol = num; }
int get_kol() { return kol; }
void set_pass(int num) { pass = num; }
int get_pass() { return pass; }
};
// Определяем класс грузовиков,
class grus : public automob {int cargo;
public:
void set_cargo(int size) { cargo = size; }
int get_cargo() { return cargo; }
void show();
};
// Определяем класс автомобилей.
class legk : public automob {
enum type car_type;
public:
void set_type(type t) { car_type = t; }
enum type get_type() { return car_type; }
void show();
};
void grus::show(){
cout <<"Koles: "<cout<<"Passajir: "<cout<<"Grusopodjemnost: "<void legk::show () {
cout<<"Koles: "<cout<<"Passajir: "<cout<<"Tip kusova: ";
switch(get_type()) {
case van: cout <<"legkovoi\n"; break;
case car: cout <<"sedan\n"; break;
case wagon: cout << "kabriolet\n"; }}
int main () {clrscr();
grus t1, t2;
legk c;
t1.set_kol(18); t1.set_pass(2) ; t1.set_cargo(3200);
t2.set_kol(6); t2.set_pass(3); t2.set_cargo(1200);
t1.show() ; cout<<"\n"; t2.show(); cout<<"\n";
c.set_kol(4); c.set_pass(6); c.set_type(van);
c.show();
getch(); return 0; }
Ushbu dastur bunday natijalarni keltirib chiqaradi.
g'ildiraklar: 18
Yo'lovchilar: 2
Kub oyoqlarda karbonatsiyasi: 3200
g'ildiraklar: 6
Yo'lovchilar: 3
Kub oyog'idagi yuk hajmi: 1200
g'ildiraklar: 4 yo'lovchi: 6 Turi: Autpuron
Ushbu dastur natijalariga ko'ra, merosning asosiy afzalligi shundaki, bu sizga ko'proq ixtisoslashgan sinflarga kiritilishi mumkin bo'lgan asosiy sinfni yaratishga imkon beradi. Shunday qilib, har bir hosilalar sinf ma'lum bir maqsad bo'lib xizmat qilishi mumkin va shu bilan birga umumiy tasnifning bir qismi bo'lib qolmoqda.
Va bundan keyin. E'tibor bering, grus va LIGK darslari ikkalasida () a'zo funktsiyalarini o'z ichiga oladi, bu ob'ekt haqida ma'lumot ko'rsatadi. Ushbu funktsiya ob'ektga yo'naltirilgan dasturlash-polimorfizmning boshqa tomonini namoyish etadi. Har bir shou () funktsiyasi o'z sinfiga bog'liq bo'lgani uchun, kompilyator ushbu ob'ekt uchun qaysi funktsiyani keltirib chiqarishi kerakligini osongina "tushunishi" mumkin.
O'zingizni ulug'vor meros tartibi bilan tanishganingizdan so'ng, ikkinchisining bitta sababi ushbu mavzu tafsilotlariga ham borishi mumkin.
Asosiy sinf a'zolariga kirish huquqini boshqarish
Agar bitta sinf ikkinchisiga meros bo'lsa, baza darsi a'zolari hosilaga aylanadi. Sinfning hosilasidagi asosiy sinf a'zolariga kirish holati bazani meros qilib olish uchun ishlatiladigan kirish tartibi bilan belgilanadi. Asosiy sinfning asosiy parametrlari kalit so'zlardan biri: jamoat, xususiy yoki himoyalangan. Agar kirish tartibi ko'rsatilmagan bo'lsa, unda biz sinf turini meros olish haqida gapiradigan bo'lsak, xususiy spetitor standart ishlatiladi. Agar strukturaning turi meros bo'lib qolsa, unda aniq belgilangan tartibda ko'rsatilgan tartibda, jamoat pardasi qo'llaniladi. Ommaviy yoki xususiy paratika qiluvchilardan foydalanishning shov-shuvini (tortishish) ko'rib chiqing. (Himoyalangan belgilar keyingi qismida tasvirlangan.)
Agar bazaviy sinf ommaviy sinf sifatida meros bo'lib qolsa, uning jamoatchiligi hosila sinfining jamoatchiligiga aylanmoqda.
Agar asosiy sinf ommaviy sinf sifatida meros bo'lib qolsa, uning barcha jamoatchiligi hosila sinfining jamoatchiligiga aylanadi. Barcha holatlarda ushbu sinf doirasida bazaning xususiy tarkibi yopiq bo'lib, hosila a'zolari uchun mavjud emas. Masalan, bazaviy sinf a'zosi bo'lgan bazaviy klassning keyingi jamoatchiligida joylashgan. Shuning uchun ular dasturning boshqa qismlari uchun mavjud bo'ladi.
// sxildt p 355
// merosni namoyish qilish,
#include
#include
class base { int i, j ;
public:
void set (int a, int b) { i = a; j = b; }
void show() { cout << i << " " << j << "\n"; } };
class derived:public base{int k;
public:
derived(int x) { k = x; }
void showk() { cout<int main() { clrscr();
derived ob(3);
ob.set(1, 2); // доступ к членам класса base
ob.show(); // доступ к членам класса base
ob.showk(); // доступ к члену класса derived
getch(); return 0; }
Set () va shou () va shoulari () funktsiyalari (asosiy sinf a'zolari) JAVOB BERADI. I va J ma'lumotlar uchun xususiy a'zo sifatida belgilanadi, ular o'zlarining asosiy sinfining bir qismi sifatida yopiq bo'lib qolmoqdalar.
Agar asosiy sinf sifatida merosxo'r bo'lsa, uning jamoatchiligi hosila sinfining shaxsiy sinfiga aylanadi.
Ochiq (jamoat) merosining aksi yopiq (xususiy). Agar asosiy sinf xususiy sinf sifatida meros bo'lib qolsa, uning barcha jamoatchiligi hosila sinfining shaxsiy a'zosi bo'ladi. Masalan, keyingi dastur tuzilmayapti, chunki sozlash () va shou () ning ikkala funktsiyasi, shuningdek, stavkalangan sinfning shaxsiy a'zosiga aylandi va shuning uchun ularni asosiy () funktsiyasidan chaqirish mumkin emas.
// Ushbu dastur tuzilmayapti.
#include
#include
using namespace std;
class base { int i, j;
public:
void set(int a, int b) { i = a; j = b; }
void show() { cout<// Открытые члены класса base теперь становятся
// закрытыми членами класса derived,
class derived : private base { int k;
public:
derived(int x) { k = x; }
void showk() { cout<int main() {clrscr();
derived ob (3);
ob.set(l, 2); // Ошибка, доступа к функции set() нет.
ob.show(); // Ошибка, доступа к функции show() нет.
Getch(); return 0; }
Shuni yodda tutish kerakki, agar asosiy sinf xususiy sinf sifatida meros bo'lib qolsa, uning ochiq a'zolari deriativ sinfning yopiq (xususiy) a'zolari. Bu shuni anglatadiki, ular deriativ sinf a'zolari uchun mavjud, ammo dasturning boshqa qismlarida mavjud emas.

Yüklə 261,55 Kb.

Dostları ilə paylaş:
  1   2   3   4   5




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə