C++ Struct (struct)
Los arreglos C/C++ permiten definir variables que pueden almacenar elementos de datos del mismo tipo, perola estructuraes otro tipo de datos disponible definido por el usuario en C++, que le permite almacenar elementos de datos de diferentes tipos.
Las estructuras se utilizan para representar un registro. Suponga que desea hacer un seguimiento de los libros en una biblioteca; es posible que necesite realizar un seguimiento de los siguientes atributos de cada libro:
- Title: Título
- Author: Autor
- Subject: Categoría
- Book ID: ID del libro
Definición de estructura
En C++, la declaración struct se utiliza para definir una estructura.
Una estructura es un tipo de datos definido por el usuario que se utiliza para agrupar datos de diferentes tipos. Similar a la clase (class), la estructura permite definir variables miembro y funciones miembro.
Para definir una estructura, debe utilizarstructla declaración. La declaración struct define un nuevo tipo de datos que contiene múltiples miembros. El formato de la declaración struct es el siguiente:
type_namees el nombre del tipo de estructura,member_type1 member_name1es una definición de variable estándar, por ejemploint i;ofloat f;u otras definiciones de variables válidas. Al final de la definición de la estructura, antes del último punto y coma, puede especificar una o más variables de estructura; esto es opcional. A continuación se declara un tipo de estructuraBooks, con variablesbook:
Ventajas de las estructuras:
- Encapsulación simple de datos: adecuada para encapsular datos simples de varios tipos; generalmente se utiliza para el almacenamiento de datos.
- Ligereza: en comparación con
class, la sintaxis de las estructuras es más concisa y adecuada para objetos de datos pequeños. - Soporte de orientación a objetos: admite constructores, funciones miembro y control de acceso, lo que permite implementar diseño orientado a objetos.
Acceso a los miembros de la estructura
Para acceder a los miembros de una estructura, utilizamosel operador de acceso a miembros (.). El operador de acceso a miembros es un punto entre el nombre de la variable de estructura y el miembro de la estructura al que queremos acceder.
El siguiente ejemplo demuestra el uso de las estructuras:
Ejemplo
En el ejemplo se define el tipo de estructura Books y sus dos variables Book1 y Book2. Cuando el código anterior se compila y ejecuta, produce los siguientes resultados:
第一本书标题 : C++ 教程 第一本书作者 : Ejemplo 第一本书类目 : 编程语言 第一本书 ID : 12345 第二本书标题 : CSS 教程 第二本书作者 : Ejemplo 第二本书类目 : 前端技术 第二本书 ID : 12346
La estructura como parámetro de función
Puede pasar una estructura como parámetro de función, de manera similar a otros tipos de variables o punteros. Puede acceder a las variables de estructura de la misma manera que en el ejemplo anterior:
Ejemplo
Cuando el código anterior se compila y ejecuta, produce los siguientes resultados:
书标题 : C++ 教程 书作者 : Ejemplo 书类目 : 编程语言 书 ID : 12345 书标题 : CSS 教程 书作者 : Ejemplo 书类目 : 前端技术 书 ID : 12346
Explicación detallada de cada parte de la estructura
La palabra clave struct:Se utiliza para definir una estructura; le dice al compilador que lo que sigue es un tipo personalizado.
Variables miembro:Las variables miembro son los elementos de datos definidos en la estructura; pueden ser de cualquier tipo básico u otro tipo personalizado. En struct, estos miembros son públicos (public) por defecto y se puede acceder a ellos directamente.
-
Funciones miembro:Las estructuras también pueden contener funciones miembro, lo que las hace similares a las clases en funcionalidad. Las funciones miembro pueden operar sobre las variables miembro de la estructura, proporcionando encapsulación y manipulación de datos.
-
Control de acceso:Similar a class, puede usar public, private y protected en struct para definir los permisos de acceso de los miembros. En struct, todos los miembros son públicos (public) por defecto, mientras que en class son privados (private) por defecto.
Puntero a estructuras
Puede definir un puntero a una estructura de manera similar a como se define un puntero a otros tipos de variables, como se muestra a continuación:
struct Books *struct_pointer;
El código anterior define un puntero struct_pointer al tipo de estructura Books.
Ahora puede almacenar la dirección de una variable de estructura en el puntero definido anteriormente. Para obtener la dirección de una variable de estructura, coloque el&operador delante del nombre de la estructura, como se muestra a continuación:
struct_pointer = &Book1;
El código anterior asigna la dirección de la variable de estructura Book1 a struct_pointer.
Para acceder a los miembros de la estructura mediante un puntero a la estructura, debe usar el->operador, como se muestra a continuación:
struct_pointer->title;
El código anterior accede al miembro title de la estructura Book1 a través de struct_pointer.
Reescribamos el ejemplo anterior usando punteros a estructuras; esto le ayudará a comprender el concepto de punteros a estructuras:
Ejemplo
Explicación:
Definición de la estructura:
BooksLa definición de la estructura es la misma que antes; contienetitle、author、subjectybook_idcuatro variables miembro y un constructor para inicializarlas.printBookInfoLa función: ahora esta función acepta un puntero aBooksun puntero a la estructuraconst Books* book. Dentro de la función, usamos->el operador para acceder a las variables miembro a las que apunta el puntero de estructura.mainLa función:crea dos
Booksobjetos de tipoBook1yBook2。usando
&el operador para obtener las direcciones de estos dos objetos y asignarlas a los punterosptrBook1yptrBook2。al llamar
printBookInfoa la función, se pasan punteros aBookslos objetos.
Cuando el código anterior se compila y ejecuta, produce los siguientes resultados:
书籍标题: C++ 教程 书籍作者: Ejemplo 书籍类目: 编程语言 书籍 ID: 12345 书籍标题: CSS 教程 书籍作者: Ejemplo 书籍类目: 前端技术 书籍 ID: 12346
La palabra clave typedef
A continuación se muestra una forma más sencilla de definir estructuras: puede asignar un 'alias' al tipo creado. Por ejemplo:
typedef struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
}Books;
Ahora puede usar directamenteBookspara definir variables de tipoBookssin necesidad de usar la palabra clave struct. A continuación se muestra un ejemplo:
Books Book1, Book2;
Puede usar latypedefpalabra clave para definir tipos que no son estructuras, como se muestra a continuación:
typedef long int *pint32; pint32 x, y, z;
x, y y z son punteros a long int (entero largo).
Diferencias entre struct y clase
En C++, struct y class son esencialmente muy similares; la única diferencia radica en la visibilidad predeterminada:
structEl acceso predeterminado de los miembros y la herencia espublic。classEl acceso predeterminado de los miembros y la herencia esprivate。
Puedes tratarstructcomo una forma simplificada declass, adecuada para el encapsulamiento simple de datos sin demasiadas funciones complejas.
Combinación de estructuras y funciones
Puedes inicializar una estructura mediante un constructor y también pasarla por referencia para evitar copias innecesarias.
Ejemplo
string title;
string author;
string subject;
int book_id;
// constructor
Books(string t, string a, string s, int id)
: title(t), author(a), subject(s), book_id(id) {}
void printInfo() const {
cout << "Título del libro: " << title << endl;
cout << "Autor del libro: " << author << endl;
cout << "Categoría del libro: " << subject << endl;
cout << "ID del libro: " << book_id << endl;
}
};
void printBookByRef(const Books& book) {
book.printInfo();
}