C(int va,int vb,int vc):B(va,vb),c(vc){} // С класының конструкторы
};
Void main()
{clrscr();
A aa(10), *pa; // А класының конструкторы шақырылады
В bb(10,100); //А класының, содан соң В класының конструкторы шақырылады
С сс(10,100,1000); //А, В және С кластарының конструкторлары шақырылады
bb.c1=25;
сс.с1=35;
aa.print();
bb.print();
cc.print();
ра=&аа;
pa->print():
pa=&bb;
pa->print();
ра=&сс;
pa->print();
getch();}
2. Орындауға арналған тапсырмалар:
1. Аты-жөнін, телефонын, туған күнін және туған күніне дейінгі күндер санын есептейтін функцияны қосатын «жазба кітапшасы» класы;
2. Дисциплинаны, аудиторияны, басталу уақытын және сабақтың басталуына дейінгі уақытты есептейтін функцияны қосатын «сабақ кестесі» класы;
3. Жолды, құрылған уақытын, ағымдық уақытты және жолдың бар уақытын есептейтін функцияны қосатын «жол» класы;
4. Терезе координаты мен түсін, терезедегі тексті, текст түсін және терезеде тексті өзгерту функциясын қосатын «терезе» класы;
5. Стандартты және экспоненциалды түрдегі комплекстік санды және санның экспоненциалды түрін есептейтін функцияны қосатын «комплексті сан» класы.
3. Өз бетімен орындауға арналған тапсырмалар (үй тапсырмасы):
Студент, Оқытушы, Кафедра меңгерушісі кластар иерархиясын құру.
Жұмысшы, Бөлім меңгерушісі, Директор кластар иерархиясын құру.
Жануар, Жыртқыш, Сүтқоректі кластар иерархиясын құру.
БЛИЦ-ТЕСТ
1. Мұрагерліктің неше түрі бар?
a) 4 b) 3 c) 2 d) 1
2. Мұрагерлік түрі protected түрінде анықталып, базалық класста компонент public түрінде сипатталса, туынды класта компонент қандай түрде көрінеді?
a) public b) private c) protected d) мүмкін емес
3. Мұрагерлік түрі public түрінде анықталып, базалық класста компонент protected түрінде сипатталса, туынды класта компонент қандай түрде көрінеді?
a) public b) private c) protected d) мүмкін емес
4. Мұрагерлік түрі private түрінде анықталып, базалық класста компонент protected түрінде сипатталса, туынды класта компонент қандай түрде көрінеді?
a) public b) private c) protected d) мүмкін емес
5. Мұрагерлік түрлері
a) бір класты, екі класты b) жалғызданған, қосарланған
c) жалғызданған, көпше түрдегі d) жалғызданған, көбейтілген
ӘДЕБИЕТТЕР:
Г.С. Иванова и др. ООП: Учебник для вузов, М., Изд-во МГТУ им.Баумана, 2003.- 368 с.
Павловская Т.А. С и С++. Программирование на языке высокого уровня.
Р.Вайнер, Л.Пинсон. С++ ИЗНУТРИ.
Р. Лафоре. Объектно-ориентированное программирование в С++.4-е издание. Питер.2004
Г. Шилдт. Самоучитель C++. - Санкт-Петербург, Изд. BHV, 2004.
А.В. Замулин. Курс лекций: Объектно-ориентированное программирование (С++)
Подбельский В.В., Фомин С.С. Программирование на языке Си: Учебное пособие. – М.: Финансы и статистика, 2004
ПРАКТИКАЛЫҚ ЖҰМЫС №5-6
ПОЛИМОРФИЗМ. АМАЛДАРДЫ ҚАЙТА АНЫҚТАУ
ЖҰМЫС МАҚСАТЫ: Ерте байланысу және кеш байланысу механизмдерімен таныстыру, амалдарды қайта анықтауды жүзеге асыра білуді үйрету.
ПРАКТИКАЛЫҚ САБАҚ ЖОСПАРЫ:
Негізгі теориялық мәліметтерді қайталау.
Шығарылған мысал есепті талқылау.
Тапсырма ретінде берілген есептерді шығару.
Өз бетімен орындауға үй тапсырмасын беру.
Сабақты қорытындылау. Блиц-тест.
БАҚЫЛАУ СҰРАҚТАРЫ:
Полиморфизм дегеніміз не?
Полиморфизмнің түрлері қандай?
Амалды қайта анықтаудың мақсаты неде?
Қандай амалдар достас функциялар, ал қандай амалдар мүшелер болуы қажет?
Қайта анықталған амалдардың нәтижені қайтару әдістері.
Қандай амалдарды қайта анықтауға болмайды?
ГЛОССАРИЙ
Полиморфизм – иерархияның әртүрлі деңгейіндегі кластар үшін қандай да бір аты бойынша бір әдістің әртүрлі аспектілерін анықтау мүмкіндігін қамтамасыз етеді.
Жай полиморфизм – ерте байланысу механизміне негізделеді.
Күрделі полиморфизм – кеш байланысу механизміне негізделеді.
Амалдарды қайта анықтау – бастапқы мәндерінің біреуін де жоғалтпай, жаңа класс объектілері үшін ұқсас мағыналы амалдарды енгізу.
Төменде келтірілген мысалды талқылаңыз:
Есептің қойылымы: Нақты сан класынан туынды бүтін сан класын сипаттау және амалдар орындау.
Программасы:
# include
#include
#include
#include
#include
Typedef unsigned long dlong;
Class Tlong {
Public:dlong num;
Tlong() { cout<< “neiniciiru konstr classa”<< endl;}
Tlong(dlong an) {cout <<”Konstr classa Tolng”<< endl;
Setnum(an); }
~Tlong(){cout<<”destr classa Tlong”<< endl;}
Int Kolc();
Void showl(){print();}
Void print(void);
Void setnum(dlong an) {num=an;}};
Void Tlong::print(){cout<<” “<
Int Tlong::kolc()
{dlong t=num; int k=0;
While(t>0) {k=k+1; t=t/10;}
Return k; }//class 2
Class Treal: public Tlong
{Public:dlong drob;
Char* real;
Void print();
Void setnumv(char*st);
Treal() { real=NULL;
Cout<<”neinicializiru konstr classa”<
Treal(char*st);
~Treal(){delete real; cout<<”destr classa Treal”<
Int dkolc();};
Treal:: Treal(char*st):Tlong()
{cout<<”konstr classa Treal”<
Void Treal:: setnumv(char*st)
{int l; char*ptr, *tremp; l=strlen(st); real=new
Char[l+1];
Temp=new char[l+1];strcpy(rel,st); strcpy(temp,st);
Ptr=strchr(temp,’.’); drob=dlong(atoll(ptr+1)); *ptr=’/0’;
Num=dolg(atoll(temp)); delete temp;}
Int Treal:: dkolc()
{ dlong t=drob; int k=0;
While (t>0) {k=k+1; t=t/10;}
Return k;}
Void Treal:: print()
{cout<<”vesh chislo:”<
Cout<<”celay chast:”<
Cout<<”drobnay chast:”<
Void showv(Tlong &par){par.print();}
Char s[25];
Void main()
{clrscr();
Cout<<”vvedite chislo ccccc,dddddd”<>s;
Treal a(s);
Cout<<”1 prostoi obekt proizvodnogo classa”<
Cout<<”yvnii vizov pereopredel-go metoda”<
a.print();
cout<<”2 vizov obekta proizvodnogo classa po
ukazatelu na proizvodnii class”
Trel *pr=new Treal(“98567.08765”);
Pr->print();
Delete pr;
Getch();
Cout<<”3 neyvnii vizov pereop metoda”<Cout<<”vizov pereopredel metoda iz nasl metoda
Showl()”<< endl;
a.showl();
getch();
Cout<<”4 vizov obekta proiz classa po ukaz na bazovii”<
Tlong *pb=new Treal(“234567.34765”);
Pb->print();// oshibka!
Delete pb;
Getch();
Cout<<”5 peredacha parameter-peremennoi”<Showv(a);
Getch(); }
Орындауға арналған тапсырмалар:
Арифметикалық амалдарды қайта анықтауды қолдана отырып «Полярлы координаталар» класын құру.
«Кафедра» класын құру кезінде полиморфизм принципін қолдану.
Қайта анықталған арифметикалық амалдарды «Таймер» бағдарламасын жүзеге асыру кезінде қолдану.
3. Өз бетімен орындауға арналған тапсырмалар (үй тапсырмасы):
Амалдарды қайта анықтауды матрицаларға, массивтерге, жиындарға арифметикалық амалдар қолдану кезінде қолдану.
Полиморфизм принципіне сүйене отырып «Отбасы» класын құру.
Авиабилет сұраныстарын есепке алу бағдарламасын құру кезінде амалдарды қайта анықтау.
БЛИЦ-ТЕСТ
1. Функцияның қайтаратын мәнінің жоқтығын қандай сөз білдіреді:
a) Main. b) Void. c) Function. d) Procedure.
2. Функция мәнін қайтару инструкциясын таңдаңыз:
a) return b) end c) define d) typedef
3. Қайта анықтауға болмайтын оператор
a) = b) <> c) : d) ;
4. Егер функция-оператор кластың кез келген компоненттеріне қатынауы қажет болса, онда оны қандай спецификатормен сипаттау керек?
a) public b) friend c) fixed d) operator