1-Дәріс. Объектіге бағытталған бағдарламалаудың технологиясы



бет19/43
Дата07.01.2022
өлшемі357,5 Kb.
#19368
1   ...   15   16   17   18   19   20   21   22   ...   43
Байланысты:
дәрістер жинағы

Бақылау сұрақтары

1. Базалық және туынды кластардың әдістердің бірдей аттары болуы мүмкін.

2. Туынды кластың болашақ ұрпағына базалық кластың әдістері мен берілгендеріне мұра бола ала ма?

3. Three класы Two класымен түзілген болсын, ал Two класы One класымен түзіледі. Бұл әдістің қай түрін Three класы алады?

4. Базалық класта public түрінде сипатталып өткен әдісті туынды класта private: түрде сипаттауға бола ма?

5. Protected қызметші сөзі қандай мақсатпен қолданылады.


7–Дәріс. Кластар иерархиясы.

  • Кластар иерархиясы.

  • Виртуалды базалық кластар.

Туынды класс бір базалық кластан артық класқа мұра ете алатын екі әдіс бар. Біріншіден туынды класс көп деңгейлі кластар иерархиясын құра отырып, базалық ретінде басқа туынды класс үшін қолданыла алады. Екіншіден, туынды класс бір базалық кластан артық класты тікелей мұра ете алады. Егер класс, туынды кластың базалық класы болып, сонымен қатар, осы туынды класс басқа класқа базалық ретінде қолданылған кезде кластың конструкторлары мұрагерлік тәртібі бойынша шақырылады. Деструкторлар кері тәртіпте шақырылады.

Егер туынды класс бірнеше базалық кластың мұрасына тікелей ие болса, онда мынадай кеңейтілген хабарлама қолданылады:

class туынды _класс _аты:as базалық_ класс_аты1;

....as базалық_класс_аты N

{ туынды класс денесі }

Мұндай жағдайда конструкторлар туынды кластың хабарламасында берілген тәртіп бойынша солдан оңға қарай орындалады. Егер осындай мұраға ие болу әдісі кезінде базалық кластардың конструкторларына аргументтерді беру қажет болса, туынды класс оларды туынды класс конструкторларының хабарламасының кеңейтілген формасын қолдана отырып береді: туынды_класс_конструкторы(аргументтер_тізімі):базалық_класс1_аты(аргументтер_тізімі);

базалық_класс 2_аты (аргументтер_ тізімі);

.....,базалық_класс N_аты(аргументтер_тізімі )

{туынды класс конструкторының денесі }

Егер туынды класс кластар иерархиясының мұрасына ие болса, әрбір туынды класс тізбекті алдыңғы базалық класқа барлық қажет аргументтерді береді. Бұл ережені орындамау бағдарламаның компиляция кезінде қатені туғызады.

Қызметші сөз сlass көмегімен анықталған класс базалық сияқты туынды бола алады. Мұндай жағдайда үнсіздік бойынша класс мүшелері жабық болып табылады.

Қызметші сөз Struct көмегімен анықталған кластар базалық сияқты туынды да бола алады, және үнсіздік бойынша класс мүшелері ашық болып табылады.

Қызметші сөз union бар класс белгілі бір класқа қатысты базалық та , туынды да бола алмайды. Туынды класс кезіндегі жағдайларды түсіндіретін бағдарламаны қарастырайық:


  • басқадан туынды класс мұрасына ие болады;

  • екі базалық кластың мұрасына тікелей ие болады;

  • бірнеше базалық кластың мұрасына тікелей ие болады.

# include

class Base1

{ int a;

public: Base1(int x) {a=x; }

int geta() { return a; }

} ;


class Der1:public Base1

{ int b;


public: Der1(int x,int y):Base1(y)

{ b=x;}


int get b() {return b;}

};

class Der2 :public Der1



{ int c;

public:Der2(int x,int y,int z):Der1(y,z)

{ c=x;}

void show()

{ cout«geta ()« ´ ´«getb()«´ ´ «getc()«endl;}

};

int main (void)



{ Der2 obj(1,2,3);

obj.show( ) ;

cout « obj.geta ( ) «´ ´« obj.getb( ) « endl ;

return 0;}

Базалық кластың ашық мүшелерінің мұрасына ие болғанда олар туынды кластың ашық мүшелеріне айналады. Сондықтан, егер geta Base1 класына мұрагерленсе, онда get a ( ) функциясы Der1 класының ашық мүшесіне айналады және кейін Der2 класының ашық мүшесіне.

Туынды класс тікелей екі базалық класқа мұрагерленетін алдыңғы бағдарламаның қайта өндірілген нұсқасын қарастырайық:

# include

class Base1

{ int a;

public: Base1(int x) {a=x; }

int geta() { return a; }

} ;


class Base2

{ int b;


public:Base2(int x) {b=x;}

int getb () {return b;}

};

class Der:public Base1,public Base2



{int c ;

public: Der(int x,int y,int z):Base1(z),Base2(y)

{ c=x;}

void show()

{ cout«geta ()« ´ ´«getb()«´ ´ «getc()«endl;}

};

int main (void)



{ Der obj(1,2,3);

obj.show( ) ;

return 0;}

Келесі бағдарламада туынды класс тікелей бірнеше базалық класқа мұрагерленетін кезде конструкторлар мен деструкторлар шақырылатын тәртіпті көрсетейік:

# include

class Base1

{ int a;

public: Base1() { cout « Base1 класс конструкторының жұмысы\ n"; }

~ Base 1() { cout « " Base1 класс деструкторының жұмысы\ n"; }

int x) {a=x; }

int geta() { return a; }

} ;


class Base2

{ int b;


public: Base2 () { cout «" Base2 класс конструкторының жұмысы\ n"; }

~ Base 2(){ cout «" Base2 класс деструкторының жұмысы\ n"; }

};

class Der :public Base1, public Base2



public:Der() { cout«" Der класс конструкторының жұмысы\ n"; }

~Der () { cout «" Der класс деструкторының жұмысы\ n"; }

};

int main (void)



{ Der obj;

return 0;}

Бірнеше базалық кластар тікелей мұрагерленсе, конструкторлар тізіммен берілетін тәртіпте солдан оңға қарай шақырылады, ал конструкторлар кері тәртіпте, сондықтан бағдарлама мынаны экранға шығарады:

Base1 класының конструкторының жұмысы

Base2 класының конструкторының жұмысы

Der класының конструкторының жұмысы

Der класының деструкторының жұмысы

Base2 класының деструкторының жұмысы

Base1 класының деструкторының жұмысы



Достарыңызбен бөлісу:
1   ...   15   16   17   18   19   20   21   22   ...   43




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет