¡Nuevo!  por fin disponible la versión 5 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


4.5.3  Operaciones permitidas con estructuras

§1  Sinopsis

La únicas operaciones con estructuras que se permiten en C++ son las siguientes:

  • Asignación (asignarlas o ser asignadas)
  • Obtener su dirección (referenciarlas mediante punteros)
  • Ser utilizadas como argumento de funciones
  • Ser utilizadas como valor de retorno de funciones
§2  Asignarlas o recibir asignación como entidad única

En estos casos, origen y destino de la asignación tiene que ser del mismo tipo, aunque si no lo son, todavía es posible la asignación miembro a miembro. Ejemplo:

struct A {

   int i,j;

} a, a1;


struct B {

   int i,j;

} b;


a = a1;   // OK: mismo tipo, se realiza asignación miembro a miembro

a = b;    // ILEGAL: tipos diferentes

a.i = b.i;   a.j = b.j;    // Ok: asignación miembro a miembro


  Observe que la asignación anterior se refiere a instancias de estructuras, no a las clases en sí mismas (recuerde que las estructuras son un tipo especial de clases 4.5). Es decir:

struct StrA { ... };
stuct StrB = StrA;            // Error!!

La asignación anterior no está permitida. Sin embargo, puesto que se trata de clases puede construirse una estructura que contenga exactamente los mismos elementos que otra anterior derivándola por herencia:

struct StrB : StrA {};

Sin embargo, recordemos que en este caso ambas estructuras son tipos distintos, por lo que más tarde no pueden efectuarse asignaciones del tipo:

StrA Sa;
StrB Sb = Sa;    // Error. Tipos distintos!!

§3  Obtener su dirección

Ver al respecto "Operadores de puntero" ( 4.9.11b).  Ejemplo:

struct StrA sa;
struct StrA* sptr;
sptr = &sa;

Nota: en el capítulo correspondiente ( 4.5.7) se detallan todos los aspectos relativos a los punteros a estructuras. Recordar aquí que al ser un tipo de clases, les son aplicables los mismos principios y reglas que a aquellas. En concreto todo lo señalado respecto a punteros. Ver a este respecto: Punteros a clases ( 4.2.1f) y Punteros a miembros ( 4.2.1g).

§4  Pasar como argumento a funciones

El paso puede realizarse de varias formas:

void f1(StrA sa);       // directamente
void f2(StrA* sptr);    // mediante un puntero a estructura
void f3(StrA& sref);    // mediante una referencia

  Más detalles al respecto en: argumentos de funciones ( 4.4.5).

§5  Ser devueltas por funciones

Una función puede devolver una estructura, un puntero a estructura o incluso una referencia:

StrX f1(void);      // f1() devuelve una estructura
StrX* f2(void);     // f2() devuelve puntero a estructura

  Más detalles al respecto en: Valor devuelto ( 4.4.7).


§6  Observe que en principio no están permitidos los operadores de relación con las estructuras. Es decir, estos objetos no pueden ser comparados ( 4.9.12):

StrA sa;
StrB sb;
sa =< sb;     // Ilegal !!

Nota:  la razón es que el compilador C++ no define tales operadores por defecto para las estructuras. Sin embargo, es posible sobrecargarlos y utilizarlos con ellas, con lo que la expresión anterior resultaría perfectamente legal. Ver al respecto el capítulo dedicado a la sobrecarga de operadores ( 4.9.18).