Darmowe Forum
Grudzieñ 22, 2024, 02:31:48 *
Witamy, Go¶æ. Zaloguj siê lub zarejestruj.
Czy dotar³ do Ciebie email aktywacyjny?

Zaloguj siê podaj±c nazwê u¿ytkownika, has³o i d³ugo¶æ sesji
Aktualno¶ci: Forum zosta³o uruchomione!
 
   Strona g³ówna   Pomoc Zaloguj siê Rejestracja  
Strony: [1]
  Drukuj  
Autor W±tek: Konstruktory i Destruktory - do czego s³u¿±  (Przeczytany 4396 razy)
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« : 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.

« Ostatnia zmiana: Luty 08, 2011, 22:23:36 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #1 : 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;}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #2 : 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.
 
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #3 : 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;}
Zapisane
Strony: [1]
  Drukuj  
 
Skocz do:  

Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC | Sitemap

Polityka cookies
Darmowe Fora | Darmowe Forum

proskills polski-serwer-rpg articz zlotasiodemka gang-nd