Última actualización:2026-10-12
struct (estructuras) en C++¶
Sobre el autor:¶
Cuenta pública personal:

1. struct en C¶
- En C, struct se usa únicamente como tipo compuesto de datos; es decir, en la declaración de la estructura solo pueden colocarse miembros de datos, no funciones.
- En la declaración de una estructura en C no se pueden usar los modificadores de acceso de C++, como public, protected y private, mientras que en C++ sí se pueden usar.
- Al definir una variable de estructura en C, si se usa la definición siguiente hay que añadir struct.
- Las estructuras de C no pueden heredar (no existe ese concepto).
- Si el nombre de una estructura coincide con el de una función, el programa se ejecuta con normalidad y la llamada se realiza correctamente! Por ejemplo: se puede definir un void Base() {} que no entra en conflicto con struct Base.
Caso completo:
#include<stdio.h>
struct Base { // public
int v1;
// public: //error
int v2;
//private:
int v3;
//void print(){ // c中不能在结构体中嵌入函数
// printf("%s\n","hello world");
//}; //error!
};
void Base(){
printf("%s\n","I am Base func");
}
//struct Base base1; //ok
//Base base2; //error
int main() {
struct Base base;
base.v1=1;
//base.print();
printf("%d\n",base.v1);
Base();
return 0;
}
Salida final:
El código completo puede verse en: struct_func.c
2. struct en C++¶
Comparado con C:
- En una estructura de C++ no solo se pueden definir datos, sino también funciones.
- En una estructura de C++ se pueden usar modificadores de acceso, como public, protected y private.
- Al usar una estructura de C++ se puede prescindir directamente de struct.
- Herencia en C++
- Si el nombre de una estructura coincide con el de una función, el programa se ejecuta con normalidad y la llamada se realiza correctamente! Pero al definir la variable de estructura solo se puede usar la forma con struct!
Por ejemplo:
Caso 1: no usar typedef para definir un alias de la estructura
Antes de añadir la función con el mismo nombre:
Después de añadir la función con el mismo nombre:
Caso 2: usar typedef para definir un alias de la estructura
typedef struct Base1 {
int v1;
int v3;
public: //显示声明public
int v2;
void print(){
printf("%s\n","hello world");
};
}B;
//void B() {} //error! 符号 "B" 已经被定义为一个 "struct Base1" 的别名
Los tres casos anteriores
#include<iostream>
#include<stdio.h>
struct Base {
int v1;
// private: //error!
int v3;
public: //显示声明public
int v2;
void print(){
printf("%s\n","hello world");
};
};
int main() {
struct Base base1; //ok
Base base2; //ok
Base base;
base.v1=1;
base.v3=2;
base.print();
printf("%d\n",base.v1);
printf("%d\n",base.v3);
return 0;
}
El código completo puede verse en: struct_func.cpp
Caso de herencia
#include<iostream>
#include<stdio.h>
struct Base {
int v1;
// private: //error!
int v3;
public: //显示声明public
int v2;
virtual void print(){
printf("%s\n","Base");
};
};
struct Derived:Base {
public:
int v2;
void print(){
printf("%s\n","Derived");
};
};
int main() {
Base *b=new Derived();
b->print();
return 0;
}
El código completo puede verse en: ext_struct_func.cpp
Función con el mismo nombre
#include<iostream>
#include<stdio.h>
struct Base {
int v1;
// private: //error!
int v3;
public: //显示声明public
int v2;
void print(){
printf("%s\n","hello world");
};
};
typedef struct Base1 {
int v1;
// private: //error!
int v3;
public: //显示声明public
int v2;
void print(){
printf("%s\n","hello world");
};
}B;
void Base(){
printf("%s\n","I am Base func");
}
//void B() {} //error! 符号 "B" 已经被定义为一个 "struct Base1" 的别名
int main() {
struct Base base; //ok
//Base base1; // error!
base.v1=1;
base.v3=2;
base.print();
printf("%d\n",base.v1);
printf("%d\n",base.v3);
Base();
return 0;
}
3. Resumen¶
Diferencias de struct entre C y C++¶
| C | C++ |
|---|---|
| No se pueden incluir funciones en la declaración de una estructura | Se pueden incluir funciones en la declaración de una estructura |
| En la declaración de una estructura en C no se pueden usar los modificadores de acceso de C++. | public, protected y private sí pueden usarse en C++. |
| Al definir una variable de estructura en C, si se usa la definición siguiente hay que añadir struct. | Se puede omitir struct |
| Las estructuras no pueden heredar (no existe ese concepto). | Pueden heredar |
| Si el nombre de una estructura coincide con el de una función, el programa se ejecuta con normalidad y la llamada es correcta! | Si el nombre de una estructura coincide con el de una función, para usar la estructura solo se puede emplear la definición con struct! |
Temas relacionados¶
- Funciones virtuales puras y clases abstractas en C++ | C++那些事
- Aserciones assert en C++ | C++那些事
- Campos de bits en C++ | C++那些事
- Implementar el polimorfismo de C++ en lenguaje C | C++那些事
- const en C++: constantes y modificación | C++那些事
- La familia completa de const en C++ | C++那些事
- El operador de desreferencia * en C++ | C++那些事
- Inicialización y asignación en C++ | C++那些事
- Formas de devolver varios valores en C++ | C++那些事
- La palabra clave mutable en C++ | C++那些事