Newsgroup: it.comp.lang.c++
Titolo: Datemi un consiglio

Sta tentando di scrivere un programma per la visualizzazione di grafici
delle funzioni elementari come ad esempio: tan x,e^x,......
Cmq ho creato in un primo modulo le seguenti classi:
class Location
protected:
    int X;
    int Y;
public:
    Location (int setX,int setY) { X=setX; Y=setY;}
    int getX() { return X;}
    int getY()  { return Y;}
};
class Point : public Location  {
public:
    Point (int setX,int setY)   : Location (setX,setY);
    void Show();     //   mostra il punto fissato
    void Hide ();     //     nasconde il punto fissato
    void Set_color (int color);     // cambia il colore del punto
    void MoveTo (int newX,int newY);      // sposta il punto
};
class Line {
    Point S_line;
    Point E_line;
public:
    Line (Point InitS,Point InitE);
    void Trace ()      // Traccia la linea
    void Hide ()        // Nasconde la linea
    void Set_color (int color)        // cambia il colore
};
class Plot {
    Point Origin;
    Line X,Y;
public:
    Plot ( Point Init_O );
    void Set_color (int color);
    void Label (char *label_X,char* label_Y);
    void Scale (int num_for_pix);
    void Show ();
    void Hide ();
};
I dettagli realizzativi delle funzioni membro sono secondo me secondari in
quanto mi viene detto all'atto dell'esecuzione è impossibile travare il
costruttore di default per inizializzare
gli elementi della classe Line S_line e E_line.
Inizialmente  ho risolto il problema inserendo degli argomenti di default
nelle classi Location, Point e Line cioè:
Location (int setX=0,int setY=0)
Point (int setX=0,int
Line (Point initS=point (),Point initE=Point ());
Ma voglio eliminare tali argomenti di default e capire perchè mi dà il
precedentemente menzionato errore.
Come posso fare?
Inoltre vorre creare una gerarchia tra le classi  cioè:
Location--->Point\
                                \_______>Plot
                                /
                       Line/
Cioè voglio far dipendere Plot da Line e da point ma come devo fare se Plot
contiene due oggetti Line?
Infine secondo voi potrei elimire qualche classe o magari costruirle in modo
diverso?
G...despite of my rage I'm still just a rat in a cage.....
Reply at:
 
dias...@hotmail.com
 
unde...@yahoo.com
  razie  a chiunque esprimerà un parere.

 Come posso fare?
Se tu dichari una variabile con un instruzione del tipo:
Location var_location;
il compilatore mette un costruttore di default per costruire l'oggetto,
qundi se non c'e'...
Un costruttore di default in generale e' sempre bene metterlo perche' in
generale fa comodo (charamente deve porre la struttura in uno stato
consistente).
Usando in parametri di default hai permesso al compilatore di utilizzare
il costruttore da te realizzato come un costruttore di default (cioe'
senza parametri).
Spero di essere stato di aiuto.
Ciao.
-- 
     (ZZZ)       Filippo Salotti, Bagni di Lucca, Lucca, Italy.
    //   \\  _                 E-mail : 
fil...@humnet.unipi.it
   /Y\    ZD<_o===============================================o
 .oZZZZZo.     | Studente Ingegneria Informatica Automatica  |
<OXXXXXXXO>    | Dip. Sistemi Elettrici Universita' di Pisa. |

diverso?
Vedi sopra... ad ogni modo bisognerebbe sapere cosa esattamente vuoi realizzare e a quali
vincoli devi sottostare. Per quello che hai postato, l'approccio seguito mi sembra sostanzialmente
corretto.
Paolo
----------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
  e-mail: 
mar...@cli.di.unipi.it
 
----------------------------------------------------------

diverso?
Ammetto di non avere esaminato dettagliatamente il tuo codice...
quindi, "passo" su questa domanda.
Alex

               
unde...@yahoo.com
  razie  a chiunque esprimerà un parere.
Saluti,
Fabio Lopiano
-- 
Real computer scientists like having a computer on their desk, else how
could they read their mail?


Plot e un sistema d'assi cartesiani che ho pensato costituito da due linee
ed un punto.
Per ereditare Line quindi deve contenre per forza solo una linea
Iinoltre posso costruire oggetti di oggetti cioè è consigliabile una cosa
del tipo Line?


 del tipo Line?
Usa l'ereditarieta` (pubblica) per definire una classe che concettualmente
(e materialmente) puo` essere utilizzata al posto della classe base
(relazione IS-A). Usa il contenimento per modellare relazioni di 
proprieta` (nel tuo caso un Plot possiede due linee e una origine).
Paolo

del tipo Line?
Non c'e` assolutamente nulla di sbagliato nel costruire oggetti
composti da altri oggetti, anzi, e` fondamentale.  Il punto e` che
l'eredita` e` una relazione MOLTO SPECIALE, spesso e volentieri
(ab-)usata quando non esprime bene i rapporti in gioco; ti passo il
consiglio veramente buono di Meyers, "More Effective C++": mai
ereditare un oggetto concreto da un altro oggetto concreto; le
basi di eredita` dovrebbero idealmente essere invece astratte,
cioe` esprimere INTERFACCE che un oggetto concreto,
ereditandole, si impegna a IMPLEMENTARE.  Il C++ ti permette
di rispettare questo consiglio, o di violarlo a tuo piacere, ma io,
se fossi in te, lo prenderei a cuore.
Alex