z2, Politechnika Wrocławska, PWR - W10- Automatyka i Robotyka, Sem4, Infa 3 C++
[ Pobierz całość w formacie PDF ]
Informatyka 3 – Laboratorium 2.
Akcesory / Konstruktor / Konstruktory przeciążone
Informatyka 3 / Projektowanie Obiektowe
Politechnika Wrocławska MVLAB
Autorzy: mgr inż. Mariusz Mrzygłód
mgr inż. Wojciech Cieszyński
Informacje ogólne
Programowanie obiektowe, język:
C++;
Åšrodowisko pracy:
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,
·
·
1
 Informatyka 3 – Laboratorium 2.
Analiza problemu.
Problem: Utworzenie klas realizujących zadania dodawania, odejmowania, mnożenia i dzielenia
wartości pieniężnych w różnych walutach.
Przykład:
5
+10
=35
Projekt obiektowy.
Należy skupić się na zapewnieniu głównej, wymaganej funkcjonalności i zgodnie z tą zasadą
zamodelować klasę wraz z jej strukturą (UML).
Jakie metody i atrybuty powinna posiadać klasa?
Realizacja wspólna, na tablicy, modelowana przez prowadzącego zajęcia.
Projekt implementacyjny.
Uszczegółowienie rozwiązania i przygotowanie do konkretnego standardu - C++.
2
Informatyka 3 – Laboratorium 2.
Kodowanie - przewodnik.
Utwórz nowy projekt.
Za pomocą kreatora klas utwórz klasę o nazwie
CLiczba
.
Dla klasy
CLiczba
utwórz za pomocą kreatora zmiennych, trzy prywatne atrybuty:
double
m_fWartosc
int m_iPrecyzja
char* m_csWartoscString.
Dla klasy
CLiczba
utwórz za pomocą kreatora funkcji, metodę
Drukuj()
wypisującą wartość liczby na
ekranie ze zmiennej
m_csWartoscString
.
Zadanie.
Zdefiniować działanie metody
Drukuj()
tak aby wypisywała na ekranie wartość liczby.
Utwórz obiekt klasy
CLiczba
w pliku głównym projektu.
Wywołaj metodę klasy
Drukuj()
.
Uruchom program i przeanalizuj działanie listy inicjalizującej klasy.
Komentarz do wyświetlania polskich znaków.
Aby wyświetlić polskie znaki należy załączyć bibliotekę
locale.h
i wywołać funkcję:
setlocale(LC_ALL,
"polish"
);
w funkcji main:
#include
"stdafx.h"
#include
"Cliczba.h"
#include
"locale.h"
int
_tmain(
int
argc, _TCHAR* argv[])
{
setlocale(LC_ALL,
"polish"
);
return
0;
}
3
Informatyka 3 – Laboratorium 2.
Laboratorium 2.
Akcesory.
Dla klasy
CLiczba
utwórz za pomocą kreatora funkcji, metodę
liczby typu double podanÄ… przez atrybut
utwórz za pomocą kreatora funkcji, metodę
UstawWartosc()
typu double podanÄ… przez atrybut do obiektu, do zmiennej
m_fWartosc
.
()
wpisującą wartość
Wartosc);
void
UstawWartosc(
double
Aby wyświetlana wartość była poprawna konieczna jest również aktualizacja zmiennej
m_csWartoscString
.
Aby wyświetlana wartość była poprawna konieczna jest również aktualizacja zmiennej
Aby wyświetlana wartość była poprawna konieczna jest również aktualizacja zmiennej
Utwórz za pomocą kreatora funkcji dla klasy
będzie ona
zmieniała tekstową wartość
funkcji dla klasy
CLiczba
prywatnÄ… funkcjÄ™ o nazwie
wartość zmiennej
m_csWartoscString.
prywatnÄ… funkcjÄ™ o nazwie
AktualizujString()
,
private
:
AktualizujString(
void
);
virtual
void
AktualizujString(
Prywatna funkcja wywołana być może jedynie w
Prywatna funkcja wywołana być może jedynie w przestrzeni klasy.
W definicji metody
AktualizujString()
elementami) do którego rzutowa
zmiennÄ…
m_fWartosc
.
AktualizujString()
utwórz bufor (zmienną char w postaci tablicy znaków ze 100
rzutowana będzie sformatowana odpowiednio liczba przechowywan
(zmienną char w postaci tablicy znaków ze 100
przechowywana przez
Następnie zdefiniuj instrukcje wpisującą do bufora
m_fWartosc [instrukcja sprintf
Następnie zdefiniuj instrukcje wpisującą do bufora jako tekst wartość liczby zawartą w zmiennej
sprintf]
.
wartość liczby zawartą w zmiennej
Aby to zrobić należy wykorzystać
załączamy do pliku źródłowego.
wykorzystać instrukcję
sprintf
zdefiniowanÄ… w bibliote
bibliotece
string.h
, którą
void
CLiczba::AktualizujString(
{
CLiczba::AktualizujString(
void
)
char
buf[100];
sprintf(buf,
"%lf"
,m_fWartosc);
,m_fWartosc);
}
Następnie musimy wyczyścić zmienną
przypisać sformatowaną i zdeponowaną w buforze wartość. Dokonujemy tego poprzez sprawdzenie
jej wartości a następnie usunięcie jej z pamięci i na nowo zaalokowanie
znaków char o długości takiej jaką posiada nasza liczba przechowywana w buforze.
kopiujemy zawartość bufora do zmiennej
Następnie musimy wyczyścić zmienną
m_csWartoscString
, nadać jej odpowiednią ilość pamięci i
przypisać sformatowaną i zdeponowaną w buforze wartość. Dokonujemy tego poprzez sprawdzenie
jej wartości a następnie usunięcie jej z pamięci i na nowo zaalokowanie jej w pamięci jako tablicy
znaków char o długości takiej jaką posiada nasza liczba przechowywana w buforze.
kopiujemy zawartość bufora do zmiennej
m_csWartoscString
.
, nadać jej odpowiednią ilość pamięci i
przypisać sformatowaną i zdeponowaną w buforze wartość. Dokonujemy tego poprzez sprawdzenie
jej w pamięci jako tablicy
znaków char o długości takiej jaką posiada nasza liczba przechowywana w buforze. Następnie
void
CLiczba::AktualizujString(
{
CLiczba::AktualizujString(
void
)
char
buf[100];
sprintf(buf,
"% lf"
,m_fWartosc);
if
(m_csWartoscString!=NULL)
{
delete
[] m_csWartoscString;
m_csWartoscString
}
,m_fWartosc);
(m_csWartoscString!=NULL)
[] m_csWartoscString;
m_csWartoscString=NULL;
m_csWartoscString=
new
new
char
[strlen(buf)+1];
strcpy(m_csWartoscString,buf);
strcpy(m_csWartoscString,buf);
}
4
Informatyka 3 – Laboratorium 2.
Laboratorium 2.
Destruktor.
W metodzie
AktualizujString()
wystepuje alokacja pamięci zmiennej
pamiętać, że każdą zaalokowaną pamięć w obiekcie należy zwolnić podczas usuwania obiektu. Do
celów zwalniania zaalokowanej w obiekcie pamięci służy destruktor klasy:
wystepuje alokacja pamięci zmiennej
m_csWartoscString
pamiętać, że każdą zaalokowaną pamięć w obiekcie należy zwolnić podczas usuwania obiektu. Do
celów zwalniania zaalokowanej w obiekcie pamięci służy destruktor klasy:
m_csWartoscString
. Należy
pamiętać, że każdą zaalokowaną pamięć w obiekcie należy zwolnić podczas usuwania obiektu. Do
CLiczba::~CLiczba(
void
)
{
if
(m_csWartoscString!=NULL)
{
(m_csWartoscString!=NULL)
delete
[] m_csWartoscString;
m_csWartoscString=NULL;
[] m_csWartoscString;
=NULL;
}
}
Tak przygotowanÄ… funkcjÄ™ aktualizujÄ…cÄ… zmiennÄ…
UstawWartosc()
.
Tak przygotowanÄ… funkcjÄ™ aktualizujÄ…cÄ… zmiennÄ…
m_csWartoscString
wywołaj
aj w akcesorze
void
CLiczba::UstawWartosc(
{
CLiczba::UstawWartosc(
double
Wartosc)
m_fWartosc=Wartosc;
m_fWartosc=Wartosc;
AktualizujString();
AktualizujString();
}
Wywołaj metodę
UstawWartosc
przeanalizować działanie programu.
UstawWartosc()
oraz
Drukuj()
w funkcji main, a następnie uruchom program, aby
przeanalizować działanie programu.
w funkcji main, a następnie uruchom program, aby
Aby wyświetlić naszą liczbę np. z trzema miejscami po przecinku należy podczas
do bufora wprowadzić formatowanie
Aby wyświetlić naszą liczbę np. z trzema miejscami po przecinku należy podczas zapisywania wartości
do bufora wprowadzić formatowanie np.:
zapisywania wartości
,m_fWartosc);
sprintf(buf,
"%.3lf"
,m_fW
artosc);
Wykorzystaj utworzonÄ… zmiennÄ…
utworzonÄ… zmiennÄ…
m_iPrecyzja
do formatowania tekstu:
,m_iPrecyzja,m_fWartosc);
sprintf(buf,
"%.*lf"
,m_iP
recyzja,m_fWartosc);
Przypisz odpowiednią wartość zmiennej
wartość zmiennej
m_iPrecyzja
na liście inicjalizującej konstruktora
inicjalizujÄ…cej konstruktora klasy:
Uruchom program i przeanalizuj działanie.
Uruchom program i przeanalizuj działanie.
Zadanie.
Utworzyć akcesor dla zmiennej
akcesora zmienna jest większa lub równa 0 i mniejsza od 10
Utworzyć akcesor dla zmiennej
m_iPrecyzja
. Dodatkowo należy sprawdzić czy przekazywana do
lub równa 0 i mniejsza od 10.
Dodatkowo należy sprawdzić czy przekazywana do
Akcesor powinien zwracać wartość
false
w przypadku wartości innej.
wracać wartość
true
w przypadku przekazania wartości z zakresu 0..1
w przypadku wartości innej.
kazania wartości z zakresu 0..10 oraz
5
[ Pobierz całość w formacie PDF ]