Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

neke osnovne oo stvari

[es] :: C/C++ programiranje :: neke osnovne oo stvari

[ Pregleda: 2076 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

overseer
BiH

Član broj: 82632
Poruke: 10
87.250.113.*



Profil

icon neke osnovne oo stvari08.11.2006. u 01:24 - pre 212 meseci
Pozdrav !

Dakle problem je sljedeci, recimo da imam klasu :

class complex{
double real , imag;

//...
};


Ono sto me muci je kako da kreiram objekt pomocu ovakve naredbe, npr.:

complex c = 15;


Sta sve treba da uradim?Preklopiti operator= ?Kako rijesiti problem konverzije tipova
(iz int u complex)?

Bilo kakva pomoc je dobrodosla !
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.routotelecom.com.



+1 Profil

icon Re: neke osnovne oo stvari08.11.2006. u 08:24 - pre 212 meseci
Za
Code:

complex c = 15;

ne morash da preklapash operator =, dovoljno je da imash konstruktor
Code:

complex(double r);

Operator = potreban je u situaciji
Code:

complex c;
c = 15;

Drugim rechima, konstruktor se automatski poziva kada se prilikom definicije vrshi i inicijalizacija objekta. Ovakav kontruktor istovremeno obezbedjuje konverziju iz double u complex (osim ako se ne stavi explicit).
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.smin.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: neke osnovne oo stvari08.11.2006. u 16:20 - pre 212 meseci
@overseer
Evo, kako bi trebalo da izgleda klasa sa primerom koriscenja:


class complex{
public:
double real , imag;

complex(void) { } //default konstruktor
complex(double n) { real = n; } //konstruktor za double
};

int main(void)
{
complex a = 7777.888;
a = 1.989;

cout << "real = " << a.real << endl;
return 0;
}

@karas
Kao sto vidis nije mu potreban preopterecen operator=, jer se poziva konstruktor da
bi konvertovao tip sa desne strane jednakosti( da ne tupim zasto jer znas i sam)
 
Odgovor na temu

overseer
BiH

Član broj: 82632
Poruke: 10
87.250.113.*



Profil

icon Re: neke osnovne oo stvari08.11.2006. u 16:52 - pre 212 meseci
Ljudi hvala vam,primjeri oprobani,sve jasno!
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.routotelecom.com.



+1 Profil

icon Re: neke osnovne oo stvari09.11.2006. u 08:19 - pre 212 meseci
U pravu si za ovaj primer, trebalo je drugachiji da odaberem, kao npr.
Code:

#include <iostream>

using std::cout;
using std::endl;

class complex
{
public:
    double real, imag;

    complex(void) { } //default konstruktor
    complex(double n) { real = n; } //konstruktor za double
};

int main(void)
{
    complex a = 7777.888;
    complex b = 1.989;
    a = b;

    cout << "real = " << a.real << endl;
    return 0;
}

Dakle, operator= u ovoj situaciji je implicitno definisan tj. kompajler ga je definisao na svoj nachin. To znachi da
Code:

a = b;

radi, ali ja ne bih prepushtao kompajleru da generishe operator=.

Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
65.213.80.*



+6 Profil

icon Re: neke osnovne oo stvari09.11.2006. u 12:56 - pre 212 meseci
Citat:

radi, ali ja ne bih prepushtao kompajleru da generishe operator=.


Naprotiv, kompajleru treba prepuštati da generiše operator =, copy constructor i destructor kad god je to moguće. Naravno, ima puno slučajeva kad to nije dobro, ali complex je školski primer "value" tipa gde kompajler izgeneriše tačno ono što ti treba.
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.smin.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: neke osnovne oo stvari09.11.2006. u 14:41 - pre 212 meseci
U jednoj knjizi sam procitao da se definisanje operator=, copy constrctora i destruktora naziva "pravilo trojke" tj.ako je potrebno da inplementiras jedno od njih, trebaces i ostala dva(sto je i logicno).

##
Dakle, operator= u ovoj situaciji je implicitno definisan tj. kompajler ga je definisao na svoj nachin
##
Kao i kod kopiranja struktura i kod klasa(ako op= nije inplementiran) kopiranje se vrsi rekurzivno sto izaziva krah ako klasa vrsi bilo kakvu manipulaciju memorijom. Dok god to nije slucaj nema potrebe za explicitnim implementiranjem pomenutih f-ja.

@Dragi Tato
Stvarno nigde ne nađoh i jednostavno ne znam kad, kako i zasto se koristi virtuelni destruktor pa ako bi mogao da kazes koju o tome bio bih ti zahvalan. Procitao sam negde da si nekom liku postavio to pitanje ali odgovora nije bilo...
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.lionbridge.com.



+6 Profil

icon Re: neke osnovne oo stvari09.11.2006. u 15:37 - pre 212 meseci
Citat:
toxi_programer: @Dragi Tato
Stvarno nigde ne nađoh i jednostavno ne znam kad, kako i zasto se koristi virtuelni destruktor pa ako bi mogao da kazes koju o tome bio bih ti zahvalan. Procitao sam negde da si nekom liku postavio to pitanje ali odgovora nije bilo...


Pročitao si ovde: http://www.novetehnologije.com/Default.aspx?tabid=109

Ukratko, ako postoji mogućnost da dođe do ovoga:

Code:

struct baza {
virtual ~baza(){}
};

struct izvedena : baza {};

int main() 
{
  baza* izv = new izvedena;
  delete izv;
}


Kad se pozove delete, onda se automatski pozove i destruktor. Pošto je izv pointer tipa baza*, a objekat je u stvari izvedena, onda destruktor baze mora da bude virtualan da bi se u stvari pozvao destruktor izvedena.

Znači, ako imaš klasu koja je predviđena za nasleđivanje, bolje stavi virtualni destruktor, osim ako si siguran da neće biti korišćena na gorepomenuti način.
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.routotelecom.com.



+1 Profil

icon Re: neke osnovne oo stvari09.11.2006. u 15:47 - pre 212 meseci
Ako operator= nije potreban stavim ga u private, a ako jeste, onda ga sam definishem. Ne znam koliko je to dobra praksa, ali oseccam se sigurnije kada ga imam na oku.:)
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

[es] :: C/C++ programiranje :: neke osnovne oo stvari

[ Pregleda: 2076 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.