Tytu³: Konstruktory i Destruktory - do czego s³u¿± Wiadomo¶æ wys³ana przez: admin Luty 08, 2011, 22:09:18 Programowanie obiektowe wprowadza dwie funkcje pe³ni±ce szczególn± rolê.
Konstruktor - który s³u¿y do automatycznego inicjowania obiektów. Destruktor -funkcja s³u¿±ca do kasowania obiektu. Kiedy wykorzystywany jest destruktor? Destruktor wykorzystywany jest wtedy , kiedy przed usuniêciem obiektu musz± byæ wykonane pewne dzia³ania, np. usuniêcie z pamiêci danych, wys³anie zapytania, czy u¿ytkownik jest pewien swojego dzia³ania. Konstruktor tworzy, a destruktor usuwa obiekt i zwalnia zarezerwowan± dla obiektu pamiêæ. Konstruktory i Destruktory domy¶lnie s± zawsze funkcjami bezargumentowymi- czyli nie zwracaj± rezultatu. Nazwa Konstruktora jest identyczna jak nazwa klasy do której jest przypisany. W jêzyku C++ mo¿na przeci±¿aæ Konstruktory, nie mo¿na przeci±¿aæ Destruktorów. Tytu³: Odp: Konstruktory i Destruktory - do czego s³u¿± Wiadomo¶æ wys³ana przez: admin Luty 08, 2011, 22:54:11 Przyk³ad 1. W programie wprowadzono klasê macierz o rozmiarze 2x2. W klasie tej zadeklarowano dwa konstruktory.
#include <cstdlib> #include <iostream> using namespace std; class macierz {private: double a,b,c,d; public: macierz(void); macierz(double a1, double a2, double a3, double a4); void wyswietl(void); double wyznacznik(void);}; int main(int argc, char *argv[]) {macierz A,B(1,2,3,4); cout<< "Wyznacznik macierzy"; A.wyswietl(); cout<<endl<<" wynosi: "<<A.wyznacznik()<<endl<<endl; B.wyswietl(); cout<<endl<<"wynosi:"<<B.wyznacznik()<<endl; system("PAUSE"); return EXIT_SUCCESS; } macierz::macierz(void){ a=b=c=d=0;} macierz::macierz(double a1, double a2, double a3, double a4) { a=a1; b=a2;c=a3; d=a4;} void macierz::wyswietl(void) {cout<<endl<<'|'<<a<<' '<< b<<'|'; cout<<endl<<'|'<< c<<' '<< d<<'|';} double macierz::wyznacznik(void) {return a*b-c*d;} Tytu³: Odp: Konstruktory i Destruktory - do czego s³u¿± Wiadomo¶æ wys³ana przez: admin Luty 08, 2011, 23:02:51 W jêzyku C++ deklaracja konstruktora nie jest konieczna. W przypadku braku zadeklarowanego konstruktora kompilator jêzyka C++ automatycznie dodaje konstruktor bezparametrowy, który niczego nie wykonuje. Brak konstruktora jest jednak pewnym odstêpstwem od regu³y.
Obecno¶æ konstruktora, to kompletna klasa. Tytu³: Odp: Konstruktory i Destruktory - do czego s³u¿± Wiadomo¶æ wys³ana przez: admin Luty 08, 2011, 23:42:02 Zadanie 2. Przedstawia ryzyko zwi±zane z tworzeniem konstruktora bezargumentowego.
#include <cstdlib> #include <iostream> #include<string> using namespace std; class komputer{ private: string marka; int pamiec; double zegar; public: komputer(void); komputer(string Marka, int Pamiec, double Zegar); void szybkosc (void); void cena(void);}; int main(int argc, char *argv[]) { string s; int a; double b; cout<<endl<<"Nazwa komputera: ";cin>>s; cout<<endl<<"Rozmiar pamiêci RAM komputera (MB): ";cin>>a; cout<<endl<<"Szybkosc zegara komputera [Mhz]: ";cin>>b; komputer markowy(s,a,b), skladak; markowy.szybkosc(); markowy.cena(); skladak.szybkosc(); skladak.cena(); system("PAUSE"); return EXIT_SUCCESS; } komputer::komputer(void) {marka="noname"; pamiec= 1024; zegar=2;} komputer::komputer(string Marka, int Pamiec, double Zegar) {marka=Marka; pamiec=Pamiec; zegar=Zegar;} void komputer::szybkosc(void) {cout<<endl<<"komputer typu: "<<marka <<" szybkosc = "<<pamiec*2/10*zegar<<endl;} void komputer:: cena(void){ cout<<endl<<"Cena komputera typu "<<marka<<" = "<<pamiec*zegar<<endl;} |