PDA

Visualizza la versione completa : [C++] Overloading funzioni virtual


minidiable
14-11-2009, 18:01
Allora la domanda penso sia semplice ma per chiarezza devo scrivere tantissime cose...se qualcuno di buon cuore mi aiuta lo ringrazio in anticipo...se vi scocciate d leggere tutto...vi capisco...GRAZIE....dopo questa premessa...:

La traccia dell'esame è la seguente:
Realizzare in C++ le classi CorpoCeleste, Stella e Satellite descritte sommariamente dal seguente diagramma delle classi UML(il diagramma non riesco a riportarlo però penso si capisca). La classe CorpoCeleste è una classe ASTRATTA. Si strutturi il codice dell’intera applicazione (programma principale e classi) secondo le appropriate tecniche di programmazione modulare.

CorpoCeleste
#Nome: string
#Tipo: string

+StampaNome_E_Tipo()
+StampaDati()

Stella

-Magnitudo: float
-Costellazione: string

+StampaDati()

Satellite

-Pianeta: string
-Distanza: float

+StampaDati()


Satellite e stella sono delle classi derivate di CorpoCeleste.

Lo svolgimento proposto dalla prof. è il seguente, con 2 file, uno .h e uno .cpp

Il primo .h esordisce così:
//ATTENZIONE: le funzioni sono state sviluppate tutte inline perche' questa
// e' la versione di test preparata per scrivere la traccia. Normalmente dovrebbero
//essere sviluppate nel file di implementazione


Vi dico il mio dubbio e poi vi scrivo i file:
allora non capisco come poter fare un file.cpp di implementazione avendo delle funzioni virtual void stampadati(); in tutte le classi e che fanno cose diverse, cioè nel file di implementazione delle funzioni come dovrei andare a scrivere la virtual void stampadati()??

Il file header1.h è:


using namespace std;
#include <string>
#include <iostream>

class CorpoCeleste {

protected:

string Nome;
string Tipo;

public:
CorpoCeleste(const string NOME="", const string T=""):
Nome(NOME), Tipo(T) {}

virtual void stampaNome_E_Tipo() {
cout << "\n Nome: " << Nome;
cout << "\n Tipo: " << Tipo;
}

virtual void stampaDati() =0;
};

class Stella: public CorpoCeleste {

protected:

string Costellazione;
float Magnitudo;

public:
Stella(const string NOME="", const string T="", const string C="", const float M=0.0):
CorpoCeleste(NOME,T), Costellazione(C), Magnitudo(M) {}
virtual void stampaDati() {
cout << "\n Costellazione: " << Costellazione;
cout << "\n Magnitudo: " << Magnitudo;
cout << "\n\n";
}
};

class Satellite: public CorpoCeleste {

protected:

string Pianeta;
float Distanza;

public:
Satellite(const string NOME="", const string T="", const string P="", const float D=0.0):
CorpoCeleste(NOME,T), Pianeta(P), Distanza(D) {}
virtual void stampaDati() {
cout << "\n Pianeta: " << Pianeta;
cout << "\n Distanza dal Pianeta (in migliaia di Km): " << Distanza;
cout << "\n\n";
}
};



Il file main1.cpp è:


#include <stdlib.h>
#include "header1.h"

int main()
{
Stella scr("Rigel","Stella","Orione",0.1);
Satellite scu("Io","Satellite","Giove",422);
CorpoCeleste* art[1];//Definizione di un array di 2 puntatori a CorpoCeleste
art[0]=&scr;
art[1]=&scu;
for (int i=0;i<2;i++) {
art[i]->stampaNome_E_Tipo();
art[i]->stampaDati();
}
system("PAUSE");
}




Vi ringrazio ancora per la pazienza se qualcuno ha letto tutto:)...GRAZIE!!!

shodan
14-11-2009, 18:17
Specifica sempre il linguaggio (come da regolamento).

Ogni classe ha la sua stampadati(), giusto?

Nel .cpp basta definirla come una normale funzione.


void Stella::stampaDati() {
...
}
//////////////////////////////
void Satellite::stampaDati() {
...
}

minidiable
15-11-2009, 09:52
grazie mille...c sono riuscito:)....

Sei stato davvero gentilE!!!

Loading