Menu
Coddy logo textTech

Incrustación de Structs

Parte de la sección Programación Orientada a Objetos del Journey de C de Coddy. Lección 28 de 61.

En lenguajes orientados a objetos como C++ o Java, la herencia permite que una clase adquiera propiedades de una clase principal. C no tiene herencia integrada, pero podemos simularla mediante una técnica llamada composición: colocar una estructura dentro de otra.

La idea es simple: si un Child necesita todas las propiedades de un Parent, incrustamos la estructura Parent como miembro de Child.

typedef struct {
    int id;
    char name[50];
} Parent;

typedef struct {
    Parent parent;  // Estructura embebida
    int grade;
} Child;

Aquí, Child contiene todo lo que tiene Parent, además de su propio campo grade. Esto es composición: el hijo «tiene un» padre en lugar de «ser un» padre, pero el efecto es similar a la herencia.

Para acceder a los miembros del padre a través de una instancia hija, usas el operador de punto dos veces:

Child c;
c.parent.id = 101;
c.parent.name[0] = 'A';
c.grade = 5;

Este patrón forma la base para construir jerarquías de tipos en C. Al incorporar una estructura base como el primer miembro, desbloqueamos técnicas potentes que exploraremos en las próximas lecciones.

challenge icon

Desafío

Fácil

Construyamos un sistema sencillo de gestión de empleados que demuestre la incrustación de estructuras: la base de la herencia en C.

Crearás una jerarquía en la que un Employee contiene un Person. Esto refleja cómo funciona la herencia: un empleado «es un» persona con información adicional relacionada con su trabajo. Al incrustar la estructura Person dentro de Employee, obtienes todas las propiedades de la persona, además de los campos específicos del empleado.

Organizarás tu código en tres archivos:

  • types.h: Define aquí ambas estructuras con protectores de inclusión. Primero, crea una estructura Person con dos campos: name (un arreglo de caracteres de 50 caracteres) y age (un entero). Después, define una estructura Employee que incruste Person como su primer miembro y añada un campo employee_id (un entero).
  • types.c: Implementa una función llamada print_employee que reciba un puntero a un Employee y muestre su información. Accede a los datos de la persona incrustada utilizando la sintaxis encadenada de punto/flecha que aprendiste.
  • main.c: Crea una variable Employee, completa todos sus campos (incluidos el nombre y la edad de la persona incrustada) y utiliza tu función de impresión para mostrar la información.

Recibirás tres entradas: el nombre del empleado (una cadena), su edad (un entero) y su ID de empleado (un entero).

Tu función print_employee debe mostrar la información del empleado con este formato:

Employee: Alice
Age: 28
ID: 1001

Donde Alice es el nombre, 28 es la edad y 1001 es el ID de empleado de tus entradas.

Recuerda acceder a los miembros de la estructura incrustada a través del miembro padre; por ejemplo, para llegar al nombre, primero navegarás a través del miembro person.

Pruébalo tú mismo

#include <stdio.h>
#include <string.h>
#include "types.h"

int main() {
    // Leer entrada
    char name[50];
    int age;
    int employee_id;
    
    fgets(name, 50, stdin);
    name[strcspn(name, "\n")] = '\0';  // Eliminar salto de línea
    scanf("%d", &age);
    scanf("%d", &employee_id);
    
    // TODO: Crea una variable Employee
    
    // TODO: Rellena el nombre y la edad de la persona embebida
    // Hint: Usa strcpy para el nombre, accede con employee.person.name
    
    // TODO: Establece el employee_id
    
    // TODO: Llama a print_employee con un puntero a tu employee
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C online