Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286

    [VisualC++] Chiamare il metodo di una classe da un'altra classe

    Al mio progetto MFC ho aggiunto una classe generica così definita in "Phisics.h":

    codice:
    
    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:


    codice:
     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:

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

  2. #2
    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:

    codice:
     double dnormal = GetNormal(...);
    come dovrei procedere?
    Dovresti semplicemente dichiarare GetNormal come una normale funzione all'esterno slegata da qualunque classe.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286
    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:
    codice:
    /////////////////////////////
    // 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:
    codice:
    /////////////////////////////
    // 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.

  4. #4
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.