Newsgroup: it.comp.lang.c++
Titolo: Numeri Complessi

Ciao a tutti.Io sono Fly e finalmente posto il mio primo msg in questo
bellissimo NG.^_^
Io conosco abbastanza bene il C e sono da poco passato al C++ e devo dire
che è un gran bel linguaggio e mi piace molto l'uidea di pensare "a
oggetti" , cosa mai fatta prima ( il Java dovevo studiarlo, ma non ho piu
seguito il corso all'uni :P , magari un giorno mi ci rimetto ).
Ora, di domande per ora non ne ho, sto studiando sul Deitel & deitel (
davvero ben fatto , ho acquistato anche il successivo, quello delle
tecniche avanzate, per cmpletare la panoramica sul linguaggio) ma vorrei
mettere il codice di una classe che ho implementato oggi ( che è uno degli
esercizi del D&D) e chiedervi cosa ne pensate e soprattutto se c'è da
migliorare ( penso che l'overloading degli operatori sarebbe il passo
successivo, vero? ).
Grazie fin da ora per una eventuale risposta.
Ciao ciao e scusate la lunghezza :)
<Code complex.h>
#ifndef COMPLEX_H
#define COMPLEX_H
class Complex {
 
public: 
	Complex(float=0.0 ,float=1.0);
	~Complex();
    void setComp(float , float );
    void setReal(float);
    void setImg(float);
    float getReal();
    float getImg();
    void addReal(float, float);
    void subReal( float, float);
    void addImg(float, float);
    void subImg(float, float);
    void addComp( Complex & , Complex & ) ;
    void subComp( Complex & , Complex & ) ;
    void printComp();  
 
 
private:
        float real;   //Parte Reale del numero complesso
        float img ;  // Parte Immaginaria
 
 
};
#endif
<\Code complex.h >
<Code complex.cpp>
#include <iostream>
#include "complex.h"
Complex::Complex(float r , float i){
    setComp( r , i );
 
}
Complex::~Complex(){
}
void Complex::setComp(float re , float im ){
    setReal(re);
    setImg(im);
}
void Complex::setReal( float r){
    real=r;    
}
void Complex::setImg(float i){
    img=i;
}
float Complex::getReal(){
    return real ;
}
float Complex::getImg(){
    return img ;
}
void Complex::addReal(float n , float m ){
    setReal(n+m) ;
}
void Complex::addImg(float n , float m){
    setImg(n+m);
}
void Complex::subReal(float n , float m ){
    setReal(m-n) ;
}
void Complex::subImg(float n, float m){
    setImg(m-n);
}
void Complex::addComp( Complex &A, Complex &B) {
    addReal( A.getReal(), B.getReal() );
    addImg(A.getImg(), B.getImg() ) ;
}
void Complex::subComp( Complex &A, Complex &B){
    subReal(A.getReal(), B.getReal() ) ;
    subImg( A.getImg(), B.getImg() ) ;
}
void Complex::printComp(){
   std::cout << "(" <<getReal() << (getImg()<0 ? "" :"+")  ;
    if (getImg()==0 || getImg()==1)  ;
    else std::cout << getImg() ;
    std::cout << (getImg() !=0 ? "i" : "0" )
    << ") " ;
 
}
<\Code complex.cpp>

 <Code complex.h>
Ti rispondo al volo prima di leggere il tuo codice (ma lo farò
appena ho tempo)
Hai dato un occhio a come è implementato il tipo standard
std::complex ?
--
Gerolamo

Guardando il monitor con completa apatia , Gerolamo elaborò queste parole:

A dire il vero nemmeno sapevo esistesse un tipo standard complex! :)
Immagino sia un po' piu` "complex" del mio.... :D
Fly

Non capisco una cosa, non so se è un tuo 'errore' o è effettivamente quello
che vuoi fare; quando scrivi ad esempio:
void Complex::addReal(float n , float m ){
    setReal(n+m) ;
}
sei conscio del fatto che dichiarando un oggetto Complex e chiamando il
metodo sopra setti la parte reale dell'oggetto come la somma dei due float
passati PERDENDO così il precedente valore?
Non sarebbe più 'standard' scrivere:
void Complex::addReal(float n ){
    real+=n ;
}
in modo da sommare appunto un reale alla parte reale del complesso (e lo
stesso vale per le funzioni simili di sottrazione ecc.)?
Non so se mi sono spiegato.
Fammi sapere,
Ciao!
Sergio

     void printComp();  
Anche se non sono affatto esperto "oso" qualche consiglio:
.Aggiungere qualche const dove non modifichi i parametri
.Le funzioni di Add e Sub non mi sembrano molto object oriented.. (x come 
le penserei io dovrebbero prendere solo un parametro)
.Guarda la classe std::Complex com'e' fatta

.Guarda la classe std::Complex com'e' fatta
In quell'esercizio mi sembra che il libro non abbia ancora affrontato
la programmazione ad oggetti, quindi in teoria non dovrebbe usare
nessuna tecnica OOP.....penso :)
(Cmq questo è il mio primo post, un salutone a tutto il newsgroup ^_^)