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

    [C++] Dichiarazione di una classe già definita

    Cari signori, sono qui a chiedere un vostro parere per aiutarmi a comprendere il seguente codice.

    codice:
    #pragma once 
    
    #include  <vector>
    using namespace  std;
    
    #include  "Vector.h"
    #include  "Matrix.h"
    #include  "FileLoader.h"
    
    class  CObject3D; 
    
    class  CModel : public  CFileLoader
    {
    public: 
    	// ... 
    
    	CObject3D* GetObject(int  ObjectNumber) const  
    	{	
    		return  mObjects[ObjectNumber];
    	}
    
    private: 
    	vector <CObject3D*> mObjects;
    
    	// ... 
    };
    Per quale motivo il programmatore ha scelto di dichiarare la classe CObject3D (subito dopo la sezione include files) dal momento che la classe è già dichiarata e definita nel file Object3D.h ?
    Ovvero, perché non ha semplicemente scelto di includere il file dell'iterfaccia della classe?

    Grazie per l'attenzione.

  2. #2
    Per caso il file Object3D.h include a sua volta il file in cui è contenuto il codice che ci hai mostrato e/o CObject3D.h fa uso della classe CFileLoader?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286
    Originariamente inviato da MItaly
    Per caso il file Object3D.h include a sua volta il file in cui è contenuto il codice che ci hai mostrato e/o CObject3D.h fa uso della classe CFileLoader?
    No, la classe CObject3D è molto semplice:


    codice:
    #pragma once 
    
    #include  "Posit.h"
    #include  "Mesh.h"
    
    #include <vector>
    using namespace  std;
    
    class  CObject3D
    {
    public: 
    	CObject3D();
    	~CObject3D();
    	vector	<CPosit> vertices;
    	vector	<CMesh> meshes;
    };
    
    C3DObject::C3DObject()
    {
    }
    
    C3DObject::~C3DObject()
    {
    	vertices.clear();
    	meshes.clear();
    }

    Il tipo CPosit indica un vettore posizione (x,y,z)


    .

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Dato che CObject3D compare solo come puntatore basta una forward declaration per accontentare il compilatore.
    Perché lo ha fatto? Forse per evitare riferimenti circolari o forse per tenere pulito il più possibile il codice.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2004
    Messaggi
    286
    Originariamente inviato da shodan Dato che CObject3D compare solo come puntatore basta una forward declaration per accontentare il compilatore.
    Perché lo ha fatto? Forse per evitare riferimenti circolari o forse per tenere pulito il più possibile il codice.
    Perfetto! La spiegazione è semplice ma da solo non ci sarei arrivato; sono ancora piuttosto acerbo nella programmazione C++. Annoterò questo accorgimento tra le regole per la pulizia e la sicurezza del codice.

    Grazie dell'aiuto.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.