C ++, Besoin d'aide pour comprendre certains constructeurs et fonctions dans une classe de vecteur en utilisant des pointeurs

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

Question

Bonjour tous;

Je dois développer une bibliothèque de classes C ++ comprenant un ensemble de techniques numériques pour le calcul scientifique. La bibliothèque doit mettre en œuvre la classe Vector (à l'aide des pointeurs) avec certaines fonctionnalités de base mentionnées dans un fichier d'en-tête « 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 */

Je suis un débutant en C ++ et j'ai une certaine confusion pour comprendre certains constructeurs et fonctions dans le code ci-dessus.

Mes questions sont les suivantes:

1- Quel est le concept du constructeur suivant?

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

Je veux dire comment initialiser un vecteur à un un tableau?

2- Quelle est la différence entre le constructeur de copie et une affectation?

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

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

3- Je sais que cette fonction est de renvoyer le ième élément du vecteur:

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

mais quelle est la différence entre elle et celui-ci:

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

Je dois comprendre le concept afin de savoir comment les mettre en œuvre dans le fichier .cpp et comment les appeler dans mon principal. Je serai heureux si vous me aider.

Cordialement,

Était-ce utile?

La solution

Q1. Ce constructeur peut être utilisé pour remplir le vecteur avec le contenu des n éléments de la matrice à partir d'un

Par exemple:

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

Q2: Le premier est un constructeur de copie, le second est un opérateur d'affectation. Le constructeur de copie est utilisé pour copier des valeurs dans un paramètre de fonction, pour retourner une valeur d'une fonction ou d'initialiser une variable.

Par exemple, le constructeur de copie est utilisé pour ces:

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.

Et l'affectation est utilisé pour ceci:

CVector<float> v4;
v4 = v1;

Q3. Le premier peut être utilisé sur la main gauche d'une affectation. La version const est utilisé lorsqu'il est appliqué à un objet 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[]

Autres conseils

1) définir vos membres à: v = new T[n]; nn = n; et copier les éléments: for (int i = 0; i != n; ++i) v[i] = a[i];

2) Copier-affectation est lorsque vous avez déjà un objet et que vous souhaitez attribuer une valeur différente à elle. Copier-constructeur est quand vous voulez créer un nouvel objet avec des valeurs d'un existant.

3) c ++ il existe un concept de fonctions const: si vous appelez la fonction sur un objet const; dire: CVector<int> const& x = ...; x[3] = 3; ne fonctionnera pas, car x est const. Mais pour cela, de ne pas travailler, les besoins de operator[] de retourner un const & à vos internes.
Pour votre information: si x est non-const, le type de x[3] est T & parce que la version non-const de operator [] est utilisé. Si x est const cependant, le type de x[3] est const T & parce que la version const de operator [] est utilisé.

Ok, je ne suis pas un gourou C ++, donc nous espérons que quelqu'un d'un carillon de volonté peu plus compétente ... mais voici mon .02 $ sur le sujet.

  1. itérer sur la matrice, en ajoutant à chaque élément du vecteur. Je suppose que n est le nombre d'éléments dans le tableau?

  2. La différence entre le constructeur de copie et celui d'affectation est probablement sémantique. Ils auront le même effet sur la structure interne du vecteur, mais peut être utilisé dans différentes situations.

  3. Ceci est juste une supposition, mais je pense mutabilité est la différence. La deuxième fonction retourne un T immuable, ce qui signifie qu'il ne peut pas être changé. La première fonction retourne un mutable (modifiable) T.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top