I10, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki Ćwiczenia


Laboratorium 10

0x08 graphic
0x08 graphic
0x01 graphic

1. Cel ćwiczenia

Celem ćwiczenia jest zapoznanie się z obsługą C++.

2. Przykłady

Zad1

Przykład prezentujący istotę dziedziczenia klas. Dziedziczenie jest to technika pozwalająca na definiowanie nowej klasy przy wykorzystaniu już wcześniej istniejącej. Poniżej została przedstawiona klasa pojazd oraz jej pochodna klasa super_pojazd.

class pojazd // definiujemy klasę pojazd

{

public: // parametry klasy pojazd

int predkosc;

int przyspieszenie;

int marka;

int model;

int kolor;

};

Chcąc utworzyć klasę zbliżoną do klasy pojazd, nie trzeba pisać całej klasy od początku - można skorzystać z dziedziczenia klas (tworząc pochodną klasy pojazd).

class super_pojazd : public pojazd // informacja dla kompilatora, że klasa

// super_pojazd jest pochodną klasy pojazd

{

public:

int turbo; // rozbudowanie klasy pojazd o parametr turbo

};

Zad2

Przykładowy program korzystający z dziedziczenia klas w języku C++. W programie przedstawiono definicję klasy o nazwie osoba i jeden obiekt tej klasy student1. Następnie utworzono klasę nowa_osoba dziedziczącą z klasy osoba oraz obiekt tej klasy student2. W nowej klasie został dodany parametr plec (płeć).

#include <iostream.h>

#include <string.h>

#include <conio.h>

class osoba {

public :

char nazwisko [80] ; //zmienne nazwisko i wiek beda odziedziczone przez klase nowa_osoba

int wiek ;

void zapamietaj (char * napis, int lata) ; // deklaracja pierwotnej funkcji zapamietaj

void wypisz () // definicja pierwotnej funkcji wypisz

{

cout << "\t" << nazwisko << " , lat : "

<< wiek <<endl ;

}

} ;

void osoba :: zapamietaj (char * napis, int lata) // definicja pierwotnej funkcji zapamitej

{

strcpy (nazwisko, napis) ;

wiek = lata ;

}

class nowa_osoba : public osoba

{

public:

char plec [20];

void zapamietaj (char * napis, int lata, char * napis2) ; // deklaracja nowej funkcji zapamietaj

void wypisz () // definiujemy nowa funkcje wypisz

{

cout << "\t" << nazwisko << " , lat : "

<< wiek << " , " << plec <<endl ;

}

};

void nowa_osoba :: zapamietaj (char * napis, int lata, char * napis2) // definicja nowej funkcji zapamietaj

{

strcpy (nazwisko, napis) ;

strcpy (plec, napis2) ;

wiek = lata ;

}

main ()

{

osoba student1 ;

student1.zapamietaj ("Jan Kowalski", 22) ;

cout << "Po wpisaniu informacji do obiektow. "

"Sprawdzamy : \n" ;

cout << "dane z obietku student1\n" ;

student1.wypisz () ;

nowa_osoba student2 ;

student2.zapamietaj ("Ewa Kowalska", 24, "kobieta") ;

cout << "Po wpisaniu informacji do obiektow. "

"Sprawdzamy : \n" ;

cout << "dane z obietku student2\n" ;

student2.wypisz () ;

getch();

}

Zad3

Przykładowy program obrazujący polimorfizm (funkcje wirtualne). Funkcje wirtualne to jakby 'inteligentne' funkcje, które potrafią się dostosować do samego programu. Aby stworzyć taką funkcję, wystarczy poprzedzić deklarację słówkiem virtual i program stanie się 'inteligentny'.

Załóżmy, że mamy dwie klasy: klasę A i dziedziczącą po niej klasę B.

#include <iostream>

class A

{

public:

int Zmienna()

{ cout << "Bazowa"; }

};

class B: public A

{

public:

int Zmienna()

{ cout << "Pochodna"; }

};

Tworzymy obiekt klasy pochodnej trzymany za wskaźnik do klasy bazowej:

int main()

{

B b;

A* p = &b;

int a = p->Zmienna();

return 0;

}

Widzimy, że p wskazuje na obiekt typu B, to jednak zostanie wywołane A::Zmienna. Jednak ta metoda to zwykła funkcja. Skąd kompilator ma wiedzieć, że obiekt, na który wskazuje p jest obiektem typu B? Za chwilę w tym samym kodzie ten sam wskaźnik może wskazać na obiekt innego typu. Jak widzimy w tym miejscu informacja o dodatkach klasy B została utracona. Język C++ w zwykłych klasach nie umieszcza informacji o typie, który pozwalałaby go identyfikować. Nie oznacza to jednak, że w C++ są tylko takie klasy. Po dodaniu w deklaracji klasy A przed nazwą metody słowo kluczowe "virtual":

class A

{

public:

virtual int Zmienna()

{ cout << "Bazowa"; }

};

Jak widzimy, zmiana w klasie B nie jest już konieczna. Każda z klas, w której zadeklarowano choć jedną metodę wirtualną, staje się klasą "Polimorficzną" i zawiera w sobie informacje, pozwalające na identyfikację typu. Każda metoda, która jest zadeklarowana jako wirtualna, podlega "Dynamicznemu wiązaniu".

3. Program ćwiczenia

Zad4

Wzorując się na przykładowym programie z Zad2, należy napisać program zawierający klasę o nazwie osoba oraz jej klasę pochodną nowa_osoba. Zdefiniować po 4 obiekty tych klas (np. student1...student4 i nowy_student1...nowy_student4). Obiektom klasy osoba przypisać wartości nazwisko i wiek, natomiast obiekty klasy pochodnej uzupełnić o zmienną płeć. Następnie należy wyświetlić informacje znajdujące się w poszczególnych obiektach.

Zad5

Należy napisać program wykorzystujący w swoim działaniu polimorfizm (funkcje wirtualne). W programie należy zdefiniować klasę Kontynent i jej pochodną klasę Panstwo. W klasie Kontynent należy umieścić funkcję wyświetlającą na ekran informację, że np.: "Na mapie wskazywana jest cała Europa". Następnie w klasie Panstwo należy umieścic tą samą funkcję wyświetlającą na ekran, której użyto w klasie Kontynent, jednak wypisującą na ekran np: "Teraz na mapie wskazujemy na Polskę". Kolejno przy użyciu wskaźnika odwołującego się do funkcji wyświetlającej, należy wypisać na ekran informację podaną w klasie Panstwo. Dzięki zastosowaniu funkcji wirtualnych będzie to możliwe, gdyż program dostosuje się i wyświetli odpowiedni komunikat.

5

Podstawy Informatyki



Wyszukiwarka

Podobne podstrony:
I9, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki Ćwiczenia
I4, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki Ćwiczenia
I12, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki Ćwiczenia
I11, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki Ćwiczenia
I5, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki Ćwiczenia
I7, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki Ćwiczenia
I3, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki Ćwiczenia
I2, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki Ćwiczenia
I15, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki Ćwiczenia
I14, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki Ćwiczenia
I13, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki Ćwiczenia
I1, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki Ćwiczenia
I6, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki Ćwiczenia
Laboratorium PI, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Podstawy Informatyki laboratorium
Test4P, Elektrotechnika AGH, Semestr I zimowy 2012-2013, Fizyka I Wykłady, Test 4
tablice na 2 kolosa 2012, Elektrotechnika AGH, Semestr IV letni 2013-2014, Podstawy Elektroenergetyk
A-03 Komparator, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, semestr V (moduł C), Pod
StablizatorySprawozdanie, Elektrotechnika AGH, Semestr IV letni 2013-2014, Podstawy Elektroniki, Pod
sumator szeregowy projekt, Elektrotechnika AGH, Semestr V zimowy 2014-2015 - MODUŁ C, semestr V (mod

więcej podobnych podstron