C ++, necesito ayuda para comprender algunos constructores y funciones en una clase vectorial utilizando punteros

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

Pregunta

Saludos a todos;

Tengo que desarrollar una biblioteca de clase C ++ que comprenda una colección de técnicas numéricas para la informática científica. La biblioteca debe implementar la clase Vector (usando punteros) con alguna funcionalidad básica establecida en un archivo de encabezado "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 */

Soy un principiante en C ++ y tengo cierta confusión para comprender algunos constructores y funciones en el código anterior.

Mis preguntas son:

1- ¿Cuál es el concepto del siguiente constructor?

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

Me refiero a cómo inicializar un vector a una matriz A?

2- ¿Cuál es la diferencia entre el constructor de copias y la asignación uno?

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

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

3- Sé que esta función es devolver el elemento ésimo del vector:

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

Pero cuál es la diferencia entre esto y este:

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

Necesito comprender el concepto para saber cómo implementarlos en el archivo .cpp y cómo llamarlos en mi principal. Me alegraré si me ayudas.

Saludos;

¿Fue útil?

Solución

P1: Este constructor se puede usar para llenar el vector con el contenido de los n elementos de la matriz que comienzan en a.

Por ejemplo:

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

P2: El primero es un constructor de copias, el segundo es un operador de asignación. El constructor de copias se usa para copiar valores en un parámetro de función, para devolver un valor de una función o para inicializar una variable.

Por ejemplo, el constructor de copias se usa para estos:

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.

Y la tarea se usa para esto:

CVector<float> v4;
v4 = v1;

Q3. El primero se puede usar en el lado izquierdo de una tarea. La versión const se usa cuando se aplica a un objeto 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[]

Otros consejos

1) Establezca a sus miembros en: v = new T[n]; nn = n;y copiar los elementos: for (int i = 0; i != n; ++i) v[i] = a[i];

2) La asignación de copia es cuando ya tiene un objeto y desea asignarle un valor diferente. Copy-Constructor es cuando desea crear un nuevo objeto con valores de uno existente.

3) En C ++ hay un concepto de funciones const: si llama a la función en un objeto const; decir: CVector<int> const& x = ...; x[3] = 3; no funcionará, ya que x es const. Pero para que esto no funcione, el operator[] necesita devolver un const & a tus partes internas.
FYI: si x no es constio, el tipo de x[3] es T & Porque la versión que no es de acuerdo de operator [] se usa. Si x es constante, sin embargo, el tipo de x[3] es const T & Porque la versión const de operator [] se usa.

Ok, no soy un gurú de C ++, así que espero que alguien un poco más competente intervine ... pero aquí están mis $ .02 sobre el tema.

  1. Iterar sobre la matriz, agregando cada elemento al vector. Supongo que n es el número de elementos en la matriz.

  2. La diferencia entre el constructor de copias y la asignación es probablemente semántica. Tendrán el mismo efecto en la estructura interna del vector, pero se pueden usar en diferentes situaciones.

  3. Esto es solo una suposición, pero creo que la mutabilidad es la diferencia. La segunda función devuelve una T inmutable, lo que significa que no se puede cambiar. La primera función devuelve un T. mutable (cambiable)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top