PDA

Visualizza la versione completa : Problema Funzione C++


Jar
02-05-2008, 20:37
Sto programmando a moduli e ho 3 classi.

Il mio problema Ŕ ke io voglio usare una solita funzione in tutte e tre le classi e non voglio dichiararla globale .

Per farvi capire meglio

PROGRAMMA 1.H
class A{
....
....
public:
void funzione();
};

Io voglio riutilizzarla anke in

class B{
....
....
....};

e

class C{
....
....
....};

Come posso fare???.... come devono essere i file di inclusione..(#include ?) GRAZIE

MacApp
02-05-2008, 20:59
In C++ meglio distinguere i metodi dalle funzioni.
Da quel che si capisce sembra che tu voglia condividere un metodo in tre classi.
Una possibile soluzione (ma ce ne sono altre) potrebbe essere quella di rendere il metodo da condividere, membro di una super classe, da cui andrai a derivare le classi che ne abbisognano (nel tuo caso le classi A, B e C).

Dark_Limit
02-05-2008, 21:16
Devi usare l'ereditarietÓ o il polimorfismo..

XWolverineX
02-05-2008, 21:47
Se non hai particolari richieste puoi fare



class A
{
public:
int Funzione(arg1,arg2);
};

class B
{
public:
int Funzione(arg1,arg2) {return A::Funzione(arg1,arg2);}
}


Se usi Visual C++ buttaci dietro un __forceinline

MacApp
02-05-2008, 21:50
Originariamente inviato da XWolverineX
Se non hai particolari richieste puoi fare



class A
{
public:
int Funzione(arg1,arg2);
};

class B
{
public:
int Funzione(arg1,arg2) {return A::Funzione(arg1,arg2);}
}


Se usi Visual C++ buttaci dietro un __forceinline

Per fare ci˛ che dici, A::Funzione DEVE essere statica..

EDIT: A::

XWolverineX
03-05-2008, 14:55
Vero.
Pensavo che le funzioni di una classe fossero automaticamente statiche.

PeppePes88
03-05-2008, 15:47
Non puo usare la parola chiave friend???

Basta dichiarare le classi b c come friend della classe A di cui vuoi usare i metodi!

O sbaglio?? Per evitare l'ereditarieta...

MacApp
03-05-2008, 16:18
Originariamente inviato da PeppePes88
Non puo usare la parola chiave friend???

Basta dichiarare le classi b c come friend della classe A di cui vuoi usare i metodi!

O sbaglio?? Per evitare l'ereditarieta...
Provaci e ti risponderai da solo ;-)

PeppePes88
04-05-2008, 11:31
Hai ragione...
Bisognerebbe dichiarare il membro che vuoi usare come statico se non non serve a niente!
GIUSTO??? :confused: :confused: :confused:

Se ti puo interessare posto il codice:


class A {
static void stampa() { cout << "CIAO" << endl; };
friend class B;
};

class B {
public:
void s() { A::stampa();}
};

int main () {
B prova;
prova.s();
return 0;
}



Ciao

Loading