C ++, bisogno di aiuto per capire alcuni costruttori e funzioni in una classe di vettore utilizzando i puntatori

StackOverflow https://stackoverflow.com/questions/5833226

Domanda

Un saluto tutto;

devo sviluppare una libreria C ++ di classe che comprende un insieme di tecniche numeriche per il calcolo scientifico. La biblioteca dovrebbe implementare classe Vector (usando puntatori) con alcune funzionalità di base affermato in un file di intestazione "Vector.h".

#ifndef VECTOR_H
#define VECTOR_H

template <class T>
class CVector {
private:
    int nn; //size of array
    T *v;   //pointer to array of data

public:

    //Default constractor
   CVector();

    //zero based array
    CVector(int n);

    //initialize to constant of value a
    CVector(int n, const T &a);

    //initialize to array a
    CVector(int n, const T *a);

    //copy constractor
    CVector(const CVector &rhs);

    //assignment
    CVector & operator=(const CVector &rhs);

    //i'th element
    inline T & operator[](const int i);

    inline const T & operator[](const int i) const;

    inline int size() const;

    //resize (contents not preserved)
    void resize(int newn);

    //resize and assign a constant value
    void assign(int newn, const T &a);

    //deconstractor
    ~CVector();

};

#endif  /* VECTOR_H */

Sono un principiante in C ++ e ho una certa confusione di capire alcuni costruttori e funzioni nel codice di cui sopra.

Le mie domande sono:

1- Qual è il concetto del seguente costruttore?

    //initialize to array a
    CVector(int n, const T *a);

voglio dire come inizializzare un vettore ad un array un?

2- Qual è la differenza tra il costruttore di copia e l'assegnazione uno?

    //copy constractor
    CVector(const CVector &rhs);

    //assignment
    CVector & operator=(const CVector &rhs);

3- So che questa funzione è di riportare l'elemento i-esimo del vettore:

    //i'th element
    inline T & operator[](const int i);

, ma qual è la differenza tra questo e questo:

    inline const T & operator[](const int i) const;

Ho bisogno di capire il concetto al fine di sapere come realizzarle nel file cpp e come chiamare loro nel mio principale. Sarò felice se mi aiuti.

Con i migliori saluti;

È stato utile?

Soluzione

Q1:. Questo costruttore può essere utilizzata per riempire il vettore con il contenuto delle n elementi dell'array da un

Ad esempio:

   float a[42] = { 31, 41, 59 };
   CVector<float> v( 3, a );

Q2: Il primo è un costruttore di copie, il secondo è un operatore di assegnazione. Il costruttore di copia viene utilizzato per copiare i valori in un parametro funzionale per ritornare un valore da una funzione, o inizializzare una variabile.

Ad esempio, il costruttore di copia viene utilizzato per questi:

CVector<float> foo( CVector<float> v ) { ... }

...
CVector<float> v1;
CVector<float> v2 = foo( v1 ); // Copy constructor used to pass in v1, and to return v2
CVector<float> v3 = v1; // Copy constructor used to copy v1 to v2.

E l'assegnazione viene utilizzato per questo:

CVector<float> v4;
v4 = v1;

Q3. Il primo può essere utilizzato sulla mano lato sinistro di un'assegnazione. La versione const viene utilizzato quando applicato ad un oggetto const.

void bar( const float & fval ) { ... }
...
CVector<float> v1( 3, a );
v1[0] = 42;   // Non-const operator[]

const CVector<float> v2 = v1; 
float value = v2[0];  // Const operator[]
bar( v2[0] ); // Const operator[]

Altri suggerimenti

1) ha fissato i soci a: v = new T[n]; nn = n; e copiare gli elementi: for (int i = 0; i != n; ++i) v[i] = a[i];

2) Copia-assegnazione è quando si dispone già di un oggetto, e si desidera assegnare un valore diverso ad esso. Costruttore di copia è quando si desidera creare un nuovo oggetto con i valori da uno esistente.

3) in C ++ v'è un concetto di funzioni const: se si chiama la funzione su un oggetto const; dire: CVector<int> const& x = ...; x[3] = 3; non funziona, dal momento che x è const. Ma perché questo non è il lavoro, le esigenze operator[] per restituire un const & ai vostri interni.
FYI: se x non è const, il tipo di x[3] è T & perché viene utilizzata la versione non-const di operator []. Se x è const tuttavia, il tipo di x[3] è const T & perché viene utilizzata la versione const di operator [].

Ok, io non sono un guru C ++, quindi si spera che qualcuno un campanello volontà po 'più competente ... ma qui è il mio $ .02 sull'argomento.

  1. iterare matrice, aggiungendo ogni elemento al vettore. Io parto dal presupposto che n è il numero di elementi nella matrice?

  2. La differenza tra il costruttore di copia e l'assegnazione è probabilmente semantica. Avranno lo stesso effetto sulla struttura interna del vettore, ma possono essere utilizzati in diverse situazioni.

  3. Questa è solo una supposizione, ma sto pensando mutevolezza è la differenza. La seconda funzione restituisce un T immutabile, il che significa che non può essere modificato. La prima funzione restituisce un mutabile (modificabile) T.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top