Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Conversii utilizator

c


Conversii utilizator

Conversiile sunt executate automat daca:



a)      operanzii nu sunt de acelasi tip (char, enum int double, , iar la atribuire se face conversia valoarii expresiei in tipul variabilei);

b)      parametrul actual nu are tipul parametrului formal (se face conversia primului);

c)      tipul valorii returna 333c21d te de o functie difera de tipul acesteia (se face conversia valorii).

Conversii implicite

Conversia dintr-un tip predefint intr-un tip abstract

Conversiile dintre un tip predefinit si un tip abstract se pot realiza printr-un constructor care sa contina un parametru avand acel tip predefinit, iar ceilalti vor fi initializati.

Exemplu

// Numere rationale: Q

#include <string.h>; #include <iostream.h>; #include <conio.h>;

long Cmmdc(long, long);

class Q ;

inline Q::Q(long p=0, long q=1 )

Q& Q::operator ~()

Q    operator *(Q r, Q s) friend

inline void Q::Tip (const char* Mes)

long Cmmdc(long a, long b)

;

void main ()

Rezultate:

x : 3/2

y : 2/9

z : 2/1

x*y = 1/3

w : 2/1

x*w = 3/1

x*2 = 3/1

2*x = 3/1

O alta varianta in care se evita utilizarea unei functii prietene este de a defini o functie membru (Produs) care se va apela de catre functia de supraincarcare a operatorului de inmultire.

Exemplu

// Numere rationale: Q

#include <string.h>; #include <iostream.h>; #include <conio.h>;

long Cmmdc(long, long);

class Q ;

inline Q::Q(long p=0, long q=1 )

Q& Q::operator ~()

inline Q Q::Produs (Q r)

Q operator (Q p, Q q) operator de inmultire

inline void Q::Tip (const char* Mes)

long Cmmdc(long a, long b)

void main ()

Rezultate:

x : 3/2

y : 2/9

z : 4/2

x*y= 1/3

x*z= 3/1

x*2= 3/1

2*x= 3/1

Conversia dintr-un tip abstract intr-un alt tip abstract

O alta problema pe care o vom aborda in cele ce urmeaza este de a realiza o conversie dintr-un tip abstract in altul. Pentru aceasta vom defini un constructor pentru realizarea conversiei dorite.

In programul urmator am definit tipul complex in cele doua forme:

a)      algebrica - clasa C,

b)      trigonometrica (polara) - clasa T.

Conversia realizata face trecerea din forma b) in forma a).

Pentru a putea verifica rezultatele, se utilizeaza si tipul complex predefinit.

Exemplu:

// Numere complexe: T C

#include <iostream.h> #include <conio.h> #include <math.h>

#include <complex.h>

// class C;

class T    ;

class C    ;

C::C ( float a, float b )

C::C (T z) // Conversie prin constructor C<-T

float C::Modul( )

float C::Arg ( )

float C::Arg ( )

void C::Tip ( const char* Mesaj)

T::T ( float Modul, float Arg)

// T::T (C w) // Conversie C->T

float T::Re ( )

float T::Im ( )

void T::Tip(const char* Mesaj)

void main ()

Rezultate:

(r,u)=2,3;

(a,b)= -1.979985+0.28224i

z =(-1.979985,0.28224)

(x,y)= -1.979985+0.28224i

(r,u)=2,3;

Conversii explicite

Conversia dintr-un tip abstract intr-un tip predefinit

Conversia dintr-un tip abstract de data intr-un tip predefinit se poate realiza prin supraincarcarea operatorului de conversie explicita corespunzator, printr-o functie membru definita astfel:

class Clasa

Clasa :: operator Tip_Predefinit ( )

In exemplul urmator se va realiza o conversie dintr-un numar rational intr-un numar real:

// Conversie Tad-Q double

#include <string.h>; #include <iostream.h>; #include <conio.h>;

class Q ;

inline Q::Q(long p, long q)

inline    Q::operator double ()

inline Q Q::operator * (Q r)

inline void Q::Tip(const char* Mes)

void main ()

Rezultate:

z = 6/35

a = 1.8

b = 1.8

Conversia dintr-un tip abstract intr-un alt tip abstract (prin operatori)

Acest tip de conversie se poate realiza si prin oparatori (dar nu simultan si prin constructori). In programul urmator este realizata conversia (prin operatorul de conversie) din trigonometrica (clasa T) in forma algebrica (clasa C):

// Numere complexe: T C

#include <iostream.h> #include <conio.h> #include <math.h>

#include <complex.h>

class C ;

C::C ( float a, float b )

float C::Modul( )

float C::Arg ( )

void C::Tip ( const char* Mesaj)

class T ;

T::T ( float Modul, float Arg)

T::operator C() // Op. Conv.

float T::Re ( )

float T::Im ( )

void T::Tip (const char* Mesaj)

void main ()

Rezultate:

(r,u)=2,3;

(a,b)= -1.979985+0.28224i

z =(-1.979985,0.28224)



Document Info


Accesari: 771
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )