PDA

Visualizza la versione completa : [VisualC++] Chiamare il metodo di una classe da un'altra classe


Paulin
20-03-2008, 19:28
Al mio progetto MFC ho aggiunto una classe generica così definita in "Phisics.h":





class CPhisics
{
public:
CPhisics();
~CPhisics();

public:
static double GetNormal(...);

};


La funzione membro GetNormal(...) è implementata in "Phisics.cpp".

Ora vorrei chiamare la funzione GetNormal(), membro di CPhisics, all'interno di un metodo di CChildView, implementato in "ChildView.cpp".

Dunque in "ChildView.cpp" aggiungo: #include "Phisics.h"

Poi nello stesso file chiamo GetNormal() con questa scrittura:





double dnormal = CPhisics::GetNormal(...);
In questo modo funziona, però ho dovuto dichiarare GetNormal() come membro statico di CPhisics e chiamarla attraverso il risolutore CPhisics:: .

Ho l'impressione che questo mio modo di lavorare non sia del tutto ortodosso, mi sbaglio? Ad esempio, se volessi eseguire una chiamata semplicemente scrivendo:




double dnormal = GetNormal(...);
come dovrei procedere?

MItaly
20-03-2008, 23:26
Se non hai bisogno di lavorare con delle istanze di una classe (se cioè definisci solo metodi statici) allora molto probabilmente non ti serve una classe, ma semplicemente delle funzioni (che puoi raggruppare in namespace).

Originariamente inviato da Paulin
Ad esempio, se volessi eseguire una chiamata semplicemente scrivendo:




double dnormal = GetNormal(...);
come dovrei procedere?
Dovresti semplicemente dichiarare GetNormal come una normale funzione all'esterno slegata da qualunque classe.

Paulin
21-03-2008, 16:41
Originariamente inviato da MItaly
Se non hai bisogno di lavorare con delle istanze di una classe (se cioè definisci solo metodi statici) allora molto probabilmente non ti serve una classe, ma semplicemente delle funzioni (che puoi raggruppare in namespace).

Ciao MItaly, in effetti l'ultima mia scrittura può aver senso solo se definisco la mia funzione a livello globale al di fuori di ogni classe, come ad esempio dentro una collezzione di funzioni.

Però la classe mi serve perché contiene i suoi dati. Allora la risposta al mio quesito probabilmente sta nella prime parole della tua risposta, ovvero dovrei creare una istanza della classe. C'ho provato e funziona, un qualcosa del genere:

La classe con il metodo che mi serve:



/////////////////////////////
// FirstClass.h

class CFirstClass
{
protected:
CFirstClass();
~CFirstClass();

private:
double FirstMethod();
};


/////////////////////////////
// FirstClass.cpp

#include "FirstClass.h"

CFirstClass::CFirstClass()
{
}

CFirstClass::~CFirstClass()
{
}

double CFirstClass::FirstMethod()
{
//... Codice ...codice.
}

L'altra classe da cui dovrei chiamare il metodo della prima classe:



/////////////////////////////
// SecondClass.h

#include "FirstClass.h"

class CSecondClass
{
protected:
CSecondClass();
~CSecondClass();

private:
CFirstClass m_first;

private:
void SecondMethod();
};


/////////////////////////////
// SecondClass.cpp

#include "SecondClass.h"

CSecondClass::CSecondClass()
{
}

CSecondClass::~CSecondClass()
{
}

void CSecondClass::SecondMethod()
{
double ddata = m_first.FirstMethod();
}

In questo modo evito di creare una metodo statico, evitando forse una cattiva pratica di programmazione, ed era poi questo il quesito del mio post.
Chiedo scusa per la banalità dei miei dubbi, ma purtroppo sto imparando il C++ su codice già esistente, e quando mi ritrovo a creare del codice di sana pianta mi nascono di questi dubbi.

MItaly
21-03-2008, 16:57
Ecco, così va bene. :)

Chiedo scusa per la banalità dei miei dubbi, ma purtroppo sto imparando il C++ su codice già esistente, e quando mi ritrovo a creare del codice di sana pianta mi nascono di questi dubbi.
Tranquillo, siamo stati tutti dei principianti. :)

Loading