[C con Clase] Duda sobre unas simples preguntas?

Davidson, Steven srd4121 en njit.edu
Sab Oct 6 00:52:15 CEST 2012


Hola Miguel Alejandro,

2012/10/5 Miguel Alejandro Jimenez Ramirez <cerberbero en gmail.com>:
> Muchas Gracias Steven , en realidad la persona que realizo el test me
> dijo que la respuesta estaba bien , pero como tu dices habian muchos
> errores en las preguntas , como estas diciendo el numero 2 no esta
> bien escrito , pienso que intentaban declarar un constructor copia.

Sí, eso quería dar a entender. La verdad es que funciona, pero siempre
es bueno indicar 'const' para esos parámetros que no vamos a
modificar.

> Pero el 6 , el operador de asignacion es implicitamente creado por el
> compilador?
>

Sí y no. El operador de asignación existe para todos los tipos de
datos, que viene definido por el lenguaje. Si queremos ser MUY
técnicos acerca de esto, podríamos decir que el compilador no crea una
función para representar este operador, como lo haría con otros
operadores sobrecargados. Por otro lado, el compilador va a generar el
código binario necesario para realizar todas las tareas que indicas
con acorde a la gramática del lenguaje, así que por esa regla de tres,
el compilador sí implementa este operador de asignación.

> es decir pues escribo una clase
>
> class A{
> A(){//constructor}
>
> A operator=(A &c1);

Debería ser:

A & operator=( const A &c1 );

Nuevamente, quieres indicar 'const' cuando puedas, pero también
deberías retornar una referencia a "este objeto" y no una copia de
este objeto.

> }
>
> A A::operator=(A &c1){
> //Codigo de asignacion
> }
>
> int main(){
>  A obj1(//parametros),obj2;
> obj2=obj1;
>
> }
>
> En este caso seguramente el operador no es implicito, pero si no
> declaro este operador dentro de mi clase , el operador de asignacion
> es implicito?, dando como parmetros la referencia de un objeto de la
> clase?
>

Sí. Como he dicho anteriormente, el lenguaje define el operador de
asignación para todos los tipos de datos. Este comportamiento proviene
de C, y C++ al ser compatible con C implementa este mismo
comportamiento. En C/C++, podemos hacer esto:

struct Algo
{
  int a;
  float b;
  char c;
  double d[100];
};

int main()
{
  struct Algo st1, st2 = {10};

  st1 = st2;

  return 0;
}

> gracias por resolver las dudas , creo que enviare el resto de
> preguntas para estar seguro de lo que respondi , pero es que estan en
> frances y me toca traducirlas.
>

Es mejor, para todos, si está en español. Personalmente, me
medio-defiendo en francés; hace tiempo que no lo uso, así que estoy
algo oxidado. Menos mal que Google ayuda en estas cosas :D


Espero haber aclarado un poco el tema.

Steven




Más información sobre la lista de distribución Cconclase