Darmowe Forum

C++ => Podstawy => W±tek zaczêty przez: admin Luty 08, 2011, 22:09:18



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;}


Polityka cookies
Darmowe Fora | Darmowe Forum

polski-serwer-rpg spw proskills gang-nd moikrewni