cplusplus01.pdf

(61 KB) Pobierz
168079737 UNPDF
wiczeniaI
8 pa¹dziernika 2009
Powtórzenie
Dziedziczenie Jest to zwi¡zek pomi¦dzy klasami obiektów, okre±laj¡cy przekazywanie
atrybutów/metod z nadklasy do jej podklas.
classA{};
classB:publicA{};
Polimorfizm Jest to mechanizm pozwalaj¡cy na ró»ne zachowanie si¦ metody w za-
le»no±ci od klasy obiektu wywołuj¡cego metod¦. Oznacza to dla obiektu klasy pochodnej
mo»liwo±¢ odwołania si¦ do przedefiniowanych metod z klasy bazowej.
classHuman{
public:
virtualvoidwrite(){
std::cout<<"IAmHuman"<<std::endl;
}
};
classHusband:publicHuman{
public:
voidwrite(){
std::cout<<"IAmHusband"<<std::endl;
}
}
classFather:publicHusband{
public:
voidwrite();
};
Agregacja Polega na zdefiniowaniu nowej klasy poprzez zło»enie klas ju» istniej¡cych.
Pkd.:
classSilnik{};
classAkumulator{};
classKoło{};
classSzyba{};
classOkno{
public:
Szybaszyba;
};
classDrzwi{};
classNadwozie{
public:
Okno[6]okna;
Drzwi[5]drzwi;
};
classPodwozie(){
public:
Koło[]koła=newKoło[4];
};
classSamochód{
public:
Nadwozienadwozie;
Podwoziepodwozie;
};
Kompozycja Jest szczególnym przypadkiem agregacji, polegaj¡cym na wył¡czno±ci ist-
nienia obiektów danej klasy w obiekcie klasy agreguj¡cej.
Przeci¡»anie funkcji Polega na deklaracji funkcji o tym samym nazewniku, a ró»n¡
liczb¡ parametrów i/lub ich typów:
voidfun(inta);
voidfun(floatb);
voidfun(inta,floatb);
Nale»y wzi¡¢ pod uwag¦ fakt, »e typ zwracany nie stanowi wyró»nika funkcji, zatem nie
mo»na dodefiniowa¢ funkcji:
intfun(chara);
za to mo»na:
intfun(floata,floatb);
Przeci¡»anie operatorów Polega na definiowaniu operatorów dla nowych typów.
Przynajmniej jeden z operandów musi by¢ niebazowy, za± operator dla tego zestawu typów
musi by¢ niezdefiniowany.
Operatory:
jednoargumentowe, np.: , + , ! , ˜ , ++ , −− , &
2
Complexoperator-(Complexc){};
Complex&operator++(Complex&c);//postifxowe
Complex&operator++(Complex&c,int);//prefixowe
dwuargumentowe, np.: , + , ,/, %,operatory podstawienia ( = , = ,... )
Complex&operator-(Complex&c1,Complex&c2);
Complex&operator*(Complex&c1,Complex&c2);
wieloargumentowe: ()
Zadania
1. Zad. 1. - Complex Zdefiniuj klas¦ Complex reprezentuj¡c¡ liczby zespolone. Zde-
finiuj operatory dodawania, mno»enia, odejmowania i dzielenia dla klasy Complex.
Zdefiniuj równie operatory relacji <,>, ==, operator przypisania i konwersji.
2. Zad. 2. - String Zdefiniuj klas¦ String reprezentuj¡c¡ ła«cuchy. Dopisz operatory
relacji, przypisania, konkatenacji.
3. Zad. 3. - Konstruktory Rozwa» nast¦pujcy kod:
classBazowa{
public:
inta,b;
Bazowa();
~Bazowa();
};
classPochodna:publicBazowa{
public:
inth;
Pochodna();
~Pochodna();
};
intmain(intargc,char*argv[]){
Pochodnac();
c.a=1;
c.b=2;
c.h=5;
try{
throwc;
}
catch(Bazowaxx){
Pochodna*c2=(Pochodna*)&xx;
intj=c2->h;
}
}
3
Co w nim jest nie tak? Jak nale»y to poprawi¢? Ile wywoła si¦ kontruktorów, a ile
destruktorów?
4. Zad. 4. - Figury. Stos.
Zdefiniuj figury: koło, trójk¡t, kwadrat w postaci klas. Zastosuj dziedziczenie.
Zdefiniuj dla nich stos.
5. Zad. 5. - Figury. Przekształcenia. (zadanie do przesłania na mejla)
Zdefiniuj figur¦ zło»on¡ jako agregat zdefiniowanych wcze±niej klas.
Zdefiniuj metody dla tych klas: przesuni¦cie o wektor, przesuni¦cie w dziedzi-
nie X, przesuni¦cie w przeciwdziedzinie Y. Dla ch¦tnych: skalowanie wzgl¦dem
±rodka układu współrz¦dnych, skalowanie wzgl¦dem podanego punktu, obrót.
4
Zgłoś jeśli naruszono regulamin