Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]reference

    ciao.
    ho il seguente header:
    codice:
    #pragma once
    #include "Structs.h"
    class CTriangle
    {
    public:
    	CTriangle(void);
    	~CTriangle(void);
    	//inserisco il vertice ee i suoi attributi
    	void InsertVertex(const POSITION& vertexes,  const NORMAL& normals, const TEXCOORD& UV, const long& nIndex);
    private:
    	//flag che mi dice se il winding order del triangolo è orario o antiorario
    	bool bIsClocwise;
    	POSITION& m_Position;
    	NORMAL& m_Normal;
    	TEXCOORD& m_UV;
    
    };
    e il seguente cpp:
    codice:
    #include "Triangle.h"
    
    CTriangle::CTriangle(void)
    {
    	m_Position = 0;
    	m_Normal = 0;
    	m_UV = 0;
    }
    
    CTriangle::~CTriangle(void)
    {
    }
    
    void CTriangle::InsertVertex(const POSITION& vertexes,  const NORMAL& normals, const TEXCOORD& UV, const long& nIndex)
    {
    
    
    
    }
    1)come è rappresentabile(come posso capirla) una variabile passata per reference all' interno della sua funzione e eventualmente come variabile membro.
    2)e per gli array passati per reference? ad esempio nel codice sotto avrei voluto passare vertexes o normals come array di tre elementi(POSITION[3] o NORMAL[3]), come posso fare?
    3)si puo utilizzare un reference come variabile membro?
    4)come la inizializzo se variabile membro
    5)come posso passare da reference a puntatore?
    grazie.

  2. #2
    Una variabile passata per reference evita che il parametro venga copiato all'interno del frame della funzione al momento della chiamata.
    1) Non capisco cosa intendi con "rappresentare". Se intendi accedere a quella variabile, basta chiamarla col suo nome, senza asterisco come invece si fa con i puntatori.
    2) Non conviene passare gli array per reference, perchè il nome di un array è assimilabile a un puntatore al tipo di dato presente nell'array, è più comodo fare:
    codice:
    CTriangle(const POSITION *vertexes, /* altri parametri */);
    In questo modo passi un array (monodimensionale). In questo caso è ovvio, ma negli altri devi sapere già il numero di elementi dell'array, o fartelo passare come parametro, altrimenti rischi un segmentation fault.
    3) Puoi impostare una variabile membro mettendola uguale a un reference che ti viene passato. Facendo così:
    codice:
    variabileMembro = myReference;
    attenzione che non viene copiato l'indirizzo dell'oggetto rappresentato da myReference, ma viene effettuata una deep-copy dell'oggetto, che diventerà la tua variabileMembro.
    4) Vedi risposta sopra.
    5) Usando l'operatore "&" per trovarne l'indirizzo, lo puoi assegnare a una variabile puntatore.
    Se state chiamando per i piedini mancanti,lasciate il vostro indirizzo,e i piedi di ricambio vi saranno consegnati da mio nipote Jody. E ora, io devo ritornare nel dolce abbraccio della cripta... Ma tornerò!!!

    The Simpson ; AABF08 (Domenica orrenda domenica)

  3. #3

    Re: [c++]reference

    Originariamente inviato da giuseppe500
    1)come è rappresentabile(come posso capirla) una variabile passata per reference all' interno della sua funzione e eventualmente come variabile membro.
    Un reference è un alias per la variabile a cui è stato inizializzato. Internamente è implementato come un puntatore, ma di fatto è più comodo pensarlo in questa maniera (ed in effetti nello standard è definito così). Una volta inizializzato (cosa che si può fare solo al momento della sua creazione) diventa a tutti gli effetti "un altro nome" per l'oggetto a cui è stato inizializzato, e non è rilocabile.
    2)e per gli array passati per reference? ad esempio nel codice sotto avrei voluto passare vertexes o normals come array di tre elementi(POSITION[3] o NORMAL[3]), come posso fare?
    codice:
    POSITION (& NomeParametro)[3]
    ma in genere non si usa: gli array decadono in puntatore nel passaggio a funzione, per cui non ci sono vantaggi in termini di prestazioni ad usare i reference; piuttosto, si usano quando si vuole forzare il passaggio di un array delle dimensioni specificate.
    3)si puo utilizzare un reference come variabile membro?
    Sì, avendo cura però di inizializzarlo a qualcosa che continui ad esistere per tutta l'esistenza dell'oggetto.
    4)come la inizializzo se variabile membro
    Come si inizializza* qualunque cosa dal costruttore: tramite la sintassi dell'initialization list:
    codice:
    class UnaClasse
    {
        int & unReference;
    public:
        UnaClasse(int & UnReference)
            : unReference(UnReference)    // <-- questa è l'initialization list
        {
        }
    };
    * nota che quando fai degli assegnamenti dentro il costruttore non stai inizializzando: i membri non-POD della classe vengono inizializzati con il costruttore di default, e quindi ci vai sopra con l'operatore di assegnamento. Al contrario, usando la sintassi dell'initialization list puoi effettuare delle vere inizializzazioni (per cui puoi costruire oggetti-membro con costruttori parametrici).
    5)come posso passare da reference a puntatore?
    Dal momento che un reference è un alias all'oggetto, esattamente come faresti con l'oggetto, ovvero con l'operatore unario &.
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.