z3-student, Politechnika Wrocławska, PWR - W10- Automatyka i Robotyka, Sem4, Infa 3 C++
[ Pobierz całość w formacie PDF ]
Informatyka 3 – Laboratorium 3.
Dziedziczenie / Funkcje Zaprzyjaźnione
Informatyka 3 / Projektowanie Obiektowe
PolitechnikaWrocławkaMVLB
Autorzy: mgrinżMariuMrygłód
mgrinżWojciechCieyńki
Informacjeogólne
Programowanieobiektowe,jyk
C++;
rodowikopracy:
Microsoft Visual Studio 2005;
rodowikonapotrebypracypoaajciamimożnapobrać
z kont studenckich MSDN AA dla Wydz. Mechanicznego PWr,
wdarmowejwerjiudotpnianejpreproducentaViualtudio2005Expre
Literatura:
J. Liberty, "C++ dlakażdego",Helion2002,
Btroutrup,"JykC++",WNT2002,
JGrbo,"ymoniaC++",Edition2000rok2006,
B. Eckel, "Thinking in C++ Edycja polska", Helion 2002,
1
Informatyka 3 – Laboratorium 3.
Dziedziczenie.
Dziedziczenie umożliwia tworzenie nowych klas napodtawiejużitniejącychmożliwocią
dodawaniakolejnychunkcjonalnoci– metod i atrybutów.
Zutworonejnapoprednichajciachklay
CLiczba
wyprowadzimy pochodnąklabdącą
repreentacjąwalutowegoapiulicb
Utwórpochodnąkla
CWaluta
diedicącąmienneimetodypoklaie
CLiczba
.
Wykorytajdotegocelukreatorkla,wktórymdeiniujdlaklay
CWaluta
klabaową
Prejddoplikunagłówkowegodziedicącejklasy
CWaluta
ipreanaliujjejdeinicj
#include
"CLiczba.h"
// dołączenie biblioteki klasy CLiczba
class
CWaluta :
// klasa CWaluta
public
CLiczba
// typu klasy CLiczba
{
public
:
CWaluta(
void
);
~CWaluta(
void
);
};
Klasa CWaluta.
Wartoćwalutowakładaiwartocilicbowejorapryrotkatrynakowegookrelającego
rodzaj waluty np.: PLN, USD, EUR, JPY. Utworzona klasa
CLiczba
posiada zapis liczb w postaci tablicy
naków
string
(tablica
char
) by utworyć api walutowy koniecnym jet, aby uupełnić
unkcjonalnoćklay
CLiczba
, tak aby wywietlaćwartoć razem z przyrostkiem walutowym.
Dodatkowo, aby umożliwić operacje dodawania itp na dwóch różnych walutach muimy
aimplementowaćprelicnikwalutowywpotacimiennejdouble.
2
Informatyka 3 – Laboratorium 3.
Dla klasy
CWaluta
utwórdwie
prywatne
zmienne:
double
m_fPrzelicznik;
char
m_csWaluta[4];
Akcesory klasy CWaluta.
Utwórwkaaneakceorydlaklay
CWaluta
:
UstawWalute()
– metodatamaaadaniewpiaćrodajwalutydlanaegoobiektu
UstawPrzelicznik()
– metodatamaaadaniewpiaćprelicnikwalutydlanaegoobiektu
DajWalute()
– metodatamaaadaniewrócićrodajwalutydlanaegoobiektu
DajPrzelicznik()
– metodatamaaadaniewrócićprelicnikwalutydlanaegoobiektu
void
UstawWalute(
const char
*waluta);
bool
UstawPrzelicznik(
double
przelicznik) ;
Zadanie.
Zdefiniuj metody
DajWalute()
i
DajPrzelicznik()
jako funkcje
inline
,takabyniemodyikowały
awartociobiektu(
const
).
Zadanie.
Zdeiniowaćdiałaniemetody
UstawWalute()
takabywpiywaładoobiekturodajwaluty
Zadanie.
Zdeiniowaćdiałaniemetody
UstawPrzelicznik()
takabywpiywaładoobiektuwartoćprelicnika
prawdająccyjegowartoćjetwikaodera
3
Informatyka 3 – Laboratorium 3.
Protected, Private
Dlapocególnych zmiennych I funkcjimożemydokładnieokrelićcymająonediałać(być
dotpne)wyłącniewobrbietejjednejklay,cytakżewklaachpochodnychDotychcelówłużą
łowaklucowe
public
,
private
i
protected
.
private
nadaje zmiennej lub metodzieatrybutdotpujedyniewewnątrdanejklay
protected
nadajemiennejlubmetodieatrybutdotpuwewnątrdanejklay jak i pochodnych.
Dotychczas zmienne
m_fWartosc
,
m_iPrecyzja
oraz
m_cdWartoscString
w klasie
CLiczba
okrelilimy
jako zmienne prywatnecelemabepieceniaichpredwpianiemnieprawidłowychwartoci.
Tym amym jednak uniemożliwilimy dotp do nich klaom pochodnym by to naprawić
koniecznym jest zdefiniowanie tych zmiennych jako chronione (
protected
).
Dikiatoowaniumiennychchronionychbdiemyteramogliużywaćichwklaiepochodnej
CWaluta
.
Zadanie.
Wplikunagłówkowymklay
CLiczba
mieńdeinicjmiennych
m-fWartosc
,
m-iPrecyzja
oraz
m-
cdWartoscString
na chronione (
protected
).
Wirtualna metoda AktualizujString().
Zdefiniowana metoda klasy
CLiczba
AktualizujString()
prepiujewartoćlicbydopotaci
string
. W
prypadkuwaluty,jejrepreentacjanakowamuiawieraćpryrotekrodajuwalutynpPLN
Dlategomuimypredeiniowaćdiałanietejmetodydlaklasy
CWaluta
.
Zadanie.
Utwórmetoddlaklay
CWaluta
o nazwie
AktualizujString()
analogicznie do tej zdefiniowanej w
klasie
CLiczba
.
4
Informatyka 3 – Laboratorium 3.
Diałaniemetody
AktualizujString()
klasy
CWaluta
jest podobne jak dla klasy
CLiczba
awyjątkiem
wpiywaniawartocido zmiennej
buf
.
Wtymmiejcudodajemyunkcjonalnoć,któraapewninam
podanie rodzaju waluty:
void
CWaluta::AktualizujString(
void
)
{
char
buf[100];
sprintf(buf,
"%.*lf %s"
,m_iPrecyzja,m_fWartosc, m_csWaluta);
// dodajemy rodzaj waluty poprzez zmienną m_csWaluta
if
(m_csWartoscString!=NULL)
delete
[] m_csWartoscString;
m_csWartoscString=
new
char
[strlen(buf)+1];
strcpy(m_csWartoscString,buf);
}
Zadanie.
Utwórobiektklay
CWaluta
z zadaną wartociąiprecyją; wywołajmetod
UstawWartosc(10)
,
wywołałmetod
Drukuj()
, a natpnie preanaliuj diałanie programu Dlacego wywietlana
wartoćniepoiadapryrotka?
Prykładrealiacji
CWaluta StanKonta;
StanKonta.UstawWalute(
"PLN"
);
StanKonta.Drukuj();
StanKonta.Wartosc(15.5);
StanKonta.Drukuj();
Metody
UstawWartosc()
oraz
UstawPrecyzje()
korzystają tutaj z metody
AktualizujString()
klasy
nadrzdnej (bazowej)
CLiczba
Diejitakdlatego,żekompilatorniewie,żemetodataotaław
pochodnej klasie zmodyfikowana by wrócić kompilatorowi uwag, żeby korytał w tym
przypadku z definicji metody
AktualizujString()
utworzonej w klasie
CWaluta
muimyokrelićjąjako
metod wirtualną już w klasie baowej
. Oznaczenie funkcji jako wirtualnej powodujeiżmetoda
AktualizujString()
klasy
CWaluta
„prykrywa”metod
AktualizujString()
klaynadrdnej– inaczej,
wskazuje kompilatorowi,żewnowoutworonejklaienajdujeitaamametodaoroeronej
unkcjonalnoci
virtual
void
AktualizujString(
void
);
Zadanie.
prawddiałaniemetodywirtualnej
AktualizujString().
Sekwencja zadan
5
[ Pobierz całość w formacie PDF ]