Darmowe Forum
Maj 16, 2024, 04:44:32 *
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 4228 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

wojownicy-nocy galaxyace forumdlahistorykow federacjagarmanii2023forum magicbears