Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2008
Тип роботи:
Лабораторна робота
Предмет:
Інші
Група:
КІ-12

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет «Львівська політехніка» Звіт: «Лабораторна робота № 8 Поліморфізми» Підготував: Ст.гр. КІ-12 Андрощук С.В. Перевірив: Цигилик Л.О. Львів 2008 Мета роботи: Короткі теоретичні відомості Поліморфізм Поліморфізм – це концепція в програмуванні, відповідно до якої використовується спільний інтерфейс для обробки даних різних спеціалізованих типів. Іншими словами один і той же метод може бути визначений для об’єктів різних типів. Конкретна поведінка метода буде залежати від типу об’єкта. С++ підтримує поліморфізм за допомогою динамічного (пізнього) зв’язування та віртуальних функцій. Згідно об'єктно-орієнтованої парадигми, вказівнику на базовий клас можна присвоїти значення адреси об'єкту будь-якого похідного класу. При цьому виклик методів через такий вказівник відбувається у відповідності до типу вказівника, а не до фактичного типу об'єкта, на який він посилається в конкретний момент. Тобто коли звертаємося до функції похідного об'єкту, використовуючи вказівник на базовий клас, викликається функція базового класу. Цей процес носить назву статичного (раннього) зв’язування, коли зв'язки з методами встановлюються жорстко на етапі компіляції програми. Якщо оголосити функцію віртуальною (virtual), то підключається механізм динамічного (пізнього) зв’язування. У такому випадку версія методу буде визначатися на етапі виконання програми в залежності від типу об'єкта, який викликав метод. Тобто при звертанні до функції похідного об'єкту, використовуючи вказівник на базовий клас, викликатиметься функція похідного класу.  //#INCLUDE "STDAFX.H" #INCLUDE <IOSTREAM.H> #INCLUDE "TIME.H" #INCLUDE <CONIO.H> #INCLUDE <IOMANIP.H> #INCLUDE <STDIO.H> #INCLUDE <STDLIB.H> #INCLUDE <STRING.H> //USING NAMESPACE STD; CHAR P[5]; INT MAIN() { ANIMAL *T; DOG *A; CAT *B=NEW CAT(); CARD *C; T=(ANIMAL*)MALLOC(SIZEOF(ANIMAL)); A=(DOG*)MALLOC(SIZEOF(DOG)); C=(CARD*)MALLOC(SIZEOF(CARD)); T->WEIGHT=15; ANIMAL *POLI=B; COUT<<"PRESS <<EXIT>> TO EXIT;\NENTER <<EAT>> OR <<WC>>;\NOR ENTER ANIMAL TO HEAR THE VOICE\NENTER <<HELP>> TO SEE THE LIST"<<ENDL<<"TO SEE OZNAKU ENTER<<DOGA>>OR<<COTA>>"<<ENDL<<"DOG TUSUE KARTU: ENTER<<CARD>>"<<ENDL<<"CAT KUDAE MONETU ENTER<<COINS>>"<<"TO SEE POLI ENTER<<POLI>>"<<ENDL; FOR(;;){ CIN>>P; IF(!STRCMP(P,"EAT")) T->FEED(); ELSE IF(!STRCMP(P,"WC")) T->DOANIMALSTUFF(); ELSE IF (!STRCMP(P,"DOGA")) { A->OZNAKAD(); C->CARDDD(); } ELSE IF (!STRCMP(P,"COTA")) B->OZNAKAC(); ELSE IF (!STRCMP(P,"CARD")) A->CARDDD(); ELSE IF (!STRCMP(P,"COINS")) T->COINSDDD(); //---------------------------------------------------- ELSE IF (!STRCMP(P,"POLI")){ POLI->FUNCTION1(); POLI->FUNCTION2(); } //---------------------------------------------------- ELSE IF(!STRCMP(P,"EXIT")) BREAK; ELSE IF(!STRCMP(P,"HELP")) COUT<<"PRESS <<EXIT>> TO EXIT;\NENTER <<EAT>> OR <<WC>>;\NOR ENTER ANIMAL TO HEAR THE VOICE\NENTER <<HELP>> TO SEE THE LIST"<<ENDL<<"TO SEE OZNAKU ENTER<<DOGA>>OR<<COTA>>"<<ENDL<<"DOG TUSUE KARTU: ENTER<<CARD>>"<<ENDL<<"CAT KUDAE MONETU ENTER<<COINS>>"; ELSE{ T->NAME=P; T->CALL(); } } RETURN 0; } //#include "stdafx.h" #include <iostream.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <conio.h> //using namespace std; class Animal { public: char *name; int weight; public: Animal() {}; ~Animal() ; void Call(); void Feed(); void DoAnimalStuff(); void function1() {cout<<"Animal"<<endl;} virtual void function2() {cout<<"Animal"<<endl;} int coinsddd(); }; void Animal::Call(){ if(strcmp(name,"dog")==0) cout<<" |\\_|\\\n / |\n | 0 0 |\n / |\\\n0_____/\\ gav-gav :)"<<endl; else if(strcmp(name,"cat")==0) cout<<" |\\_/|\n | |\n/ 0 0 \\\n\\ ~o~ /\n \\---/\n ^^^ miav-miav :)"<<endl; else cout<<"no such command"<<endl; } void Animal::Feed(){ cout<<(weight+=5)<<"kg"<<endl; } void Animal::DoAnimalStuff(){ if (weight<=0) cout<<"animal don't want to do it!"<<endl; else weight-=3; cout<<weight<<"kg"<<endl; } class Cat:public Animal { public: char c[10]; void oznakac(); void function1() {cout<<"Cat"<<endl;} virtual void function2() {cout<<"Cat"<<endl;} }; enum Suit {clubs, diamonds, hearts, spades}; class card { public : int number; Suit suit; void carddd(); public: card( ) { } void set (int n, Suit s) {suit = s; number = n; } void display (); }; const int jack = 11; const int queen = 12; const int king = 13; const int ace= 14; void card ::display () { if (number >=2 && number <=10) cout<<number; else { switch ( number ) { case jack :cout<<'J';break; case queen:cout<<'Q';break; case king:cout<<'K';break; case ace:cout<<'A';break; } } switch (suit) { case clubs : cout <<static_cast<char>(5); break; case diamonds : cout <<static_cast<char>(4); break; case hearts : cout <<static_cast<char>(3); break; case spades : cout <<static_cast<char>(6); break; } } void card::carddd() { card deck [52]; int j; cout<<endl; for ( j=0; j<52; j++){ int num = (j%13)+2; Suit su = Suit (j/13); deck [ j ].set (num,su); } cout <<"koloda card: \n"; for ( j=0; j<52; j++) { deck[ j ].display (); cout<< " "; if (! ((j+1)%13)) cout <<endl; } srand (time (NULL)); for (j=0; j<52; j++) { int k =rand ()%52; card temp = deck[ j ]; deck [ j ] = deck [ k ]; deck[ k ] = temp; } cout <<"\n peremishna : \n"; for (j=0; j<52; j++) { deck [ j ].display (); cout<< " "; if (!((j+1) %13)) cout<<endl; } } class Time { public: Time (); void printMilitary(); void printStandard(); private: int ar[3]; }; Time::Time() { ar[0]=0; ar[1]=0; ar[2]=0; } void Time::printMilitary() { srand((unsigned) time(NULL)); for(int i=0;i<3; i++) ar[i]=rand()%2; } void Time::printStandard() { for(int i=0;i<3; i++) { if (ar[i]==1) cout<<"reshka"<<endl; else cout<<"orel"<<endl; } } int Animal::coinsddd () { char ch; Time t; while((ch=getch())!='\t') { t.printMilitary(); t.printStandard() ; cout<<"to continue press any key or "<<"to exit press Tab"<<endl; } return 0; } class Dog:public Animal,public card { public: char d[10]; void oznakad(); }; void Dog::oznakad(){ strcpy(d,"kus'uchiy"); cout<<d<<endl;} void Cat::oznakac(){ strcpy(c,"drapuchiy"); cout<<c<<endl;} ВИСНОВОК: Я навчився працювати з поліморфізмами.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!