Disponible la nueva versión "donationware" 7.3 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).