z4, Politechnika Wrocławska, PWR - W10- Automatyka i Robotyka, Sem4, Infa 3 C++
[ Pobierz całość w formacie PDF ]
//-->Informatyka 3 – Laboratorium 4.Operatory / thisInformatyka 3 / Projektowanie ObiektowePolitechnika Wrocławska MVLABAutorzy:mgr inż. Mariusz Mrzygłódmgr inż. Wojciech CieszyńskiInformacje ogólneProgramowanie obiektowe, język:Środowisko pracy:C++;Microsoft Visual Studio 2005;Środowisko na potrzeby pracy poza zajęciami można pobrać:••z kont studenckich MSDN AA dla Wydz. Mechanicznego PWr,w darmowej wersji udostępnianej przez producenta: Visual Studio 2005 Express.Literatura:•••••J. Liberty, "C++ dla każdego", Helion 2002,B. Stroustrup, "Język C++", WNT 2002,J.Grębosz, "Symfonia C++", Editions 2000 rok 2006,B. Eckel, "Thinking in C++ Edycja polska", Helion 2002,1Informatyka 3 – Laboratorium 4.Operatory.Aby utworzyć program, który będzie spełniał funkcję kalkulatora walutowego, koniecznym jestrównież zdefiniowanie działań matematycznych dla utworzonych przez nas obiektów. Jako iżutworzone przez nas klasy są dla kompilatora nowymi typami danych, nie jest on w stanie określić jakma się zachowywać obiekt w przypadku, gdy np. będziemy takie dwa obiekty dodawali.Musimy zatem zdefiniować jakie czynności powinny wykonywać się podczas np. takiego dodawania –czyli określić jak mają działać operatory tj. + - * / w przypadku działań na naszych obiektach.Metoda Dodaj() i operator +.W pierwszej kolejności utworzymy metodęDodaj()dla klasyCLiczba,która będzie dodawała dwaobiekty. Jej działanie spowoduje, że do aktualnego obiektu zostanie dodany inny obiekt, dlatego teżargumentem metody będzie tylko jeden dodawany obiekt.Utwórz metodęDodaj()dla klasyCLiczba:CLiczba &Dodaj(CLiczba &LiczbaDodawana);Zdefiniuj działanie metodyDodaj():Cliczba &CLiczba::Dodaj(CLiczba &LiczbaDodawana){UstawWartosc(m_fWartosc+LiczbaDodawana.m_fWartosc);return(*this);}Matematycznie możemy zapisać tą metodę jako;Liczba = Liczba + LiczbaDodawana, ale wywoływana będzie jako:Liczba.Dodaj(&LiczbaDodawana);Zauważyć można jednak, że dodawanie to będzie wywoływane poprzez wywołanie metodyDodaj().Chcielibyśmy jednak, aby móc dodać obiekty poprzez operator „+”, tak jak dodajemy zwykłe liczby.Do tych celów zastosujemy słowo kluczoweoperator.2Informatyka 3 – Laboratorium 4.Utwórz metodęoperator+=CLiczba &operator+=(CLiczba &LiczbaDodawana);i zdefiniuj ciało funkcji:CLiczba &CLiczba::operator+=(CLiczba &LiczbaDodawana){UstawWartosc(m_fWartosc+LiczbaDodawana.m_fWartosc);return(*this);}W tym przypadku matematycznie działanie możemy zapisać również jako:Liczba = Liczba + LiczbaDodawana, ale wywoływana będzie jako:Liczba += LiczbaDodawana;Słowo kluczowe this.Każda funkcja składowa klasy posiada ukryty parametr, jest nim wskaźnikthis.Wskaźnikthiswskazuje na ten egzemplarz obiektu klasy, dla którego wywołana została dana funkcja składowa.Dzięki wykorzystaniu tego słówka kluczowego możemy w metodzie zwrócić obiekt, który jestobiektem powstałym z obiektu, który wykonał tą metodę.Operator przyrównania =.Podobnie zdefiniujemy operator przypisania, jako iż chcemy umożliwić przypisanie naszej Liczbieprzypisanie innych utworzonych liczb.CLiczba &operator=(CLiczba &LiczbaPrzyrownywana);W definicji operatora przyrównywać będziemy wartości obiektów, jednakże sprawdzić musimy czyprzypadkiem nie przypisujemy obiektu do siebie samego co byłoby bezsensowne:CLiczba &CLiczba::operator=(CLiczba &LiczbaPrzyrownywana){if(&LiczbaPrzyrownywana!=this){m_iPrecyzja=LiczbaPrzyrownywana.m_iPrecyzja;m_fWartosc=LiczbaPrzyrownywana.m_fWartosc;AktualizujString();}return(*this);}3Informatyka 3 – Laboratorium 4.Matematycznie zapisać to działanie możemy jako:Liczba = (Liczba = LiczbaPrzyrownywana)Zadanie.Utwórz dwa obiekty klasyCLiczbanadając im wartości i precyzję, a następnie dodaj je do siebie zapomocą operatora „+”, a następnie przyrównaj wynik działania za pomocą operatora „=” do trzeciegoobiektu.Wywołaj następnie metodęDrukuj()i sprawdź czy operatory działają poprawnie.W przypadku obiektu klasyCLiczbanależałoby również zdefiniować operator, który pozwoliłby namprzypisać do naszego obiektu jakąś liczbę rzeczywistą np.:Liczba = (Liczba = 3.14)Dla takiego działania musimy zdefiniować osobny operator:CLiczba &operator=(double LiczbaRzeczywista);oraz ciało jego funkcji, w którym jako alternatywne użycie wskaźnikathiswykorzystamy konstruktorz parametrami:CLiczba &CLiczba::operator=(double LiczbaRzeczywista){UstawWartosc(LiczbaRzeczywista);return(*this);}Zadanie.Utwórz operator dodawania liczby rzeczywistej. Wykorzystaj metodęUstawWartosc().4Informatyka 3 – Laboratorium 4.Operator inkrementacji post++.Utwórzmy teraz operatory inkrementacji, dzięki którym będziemy mogli zwiększać wartość naszegoobiektu. W języku dla zwykłych liczb istnieją dwa takie operatory:C++++C// postfix// prefixJeden z nich (postfix) oznacza, że zostanie zwrócony obiekt jeszcze przed zwiększeniem.drugi zaś (prefix), że najpierw obiekt zostanie zwiększony, a potem zwrócony.Utwórzmy zatemoperatorinkrementacjipostfix:CLiczbaoperator++(int);Nagłówek funkcji operatora zawiera argumentintbez nazwy argumentu. Jest to jedynie wskazanie,że operator ten jest operatorempostfix.CLiczba CLiczba::operator++(int)//{CLiczba l(*this);//UstawWartosc(m_fWartosc+1.0);//returnl;// zwracamy obiekt przed zwiększeniem}postfixtworzymy lokalną kopię obiektuzwiększamy wartość obiektuwartościOperator inkrementacji ++pre.W przypadku operatora inkrementacjiprefixargumentintnie występuje:CLiczba &operator++();, a w ciele funkcji operatora nie musimy już tworzyć obiektu lokalnego:CLiczba &CLiczba::operator++()// prefix{UstawWartosc(m_fWartosc+1.0);// zwiększamy wartość obiektureturn(*this);// zwracamy obiekt po zwiększeniu wartości}5
[ Pobierz całość w formacie PDF ]