C++ Cấu trúc với ví dụ

⚡ Tóm tắt thông minh

Cấu trúc trong C++ Đây là kiểu dữ liệu do người dùng định nghĩa, nhóm các phần tử thuộc các kiểu dữ liệu khác nhau dưới một tên duy nhất, cho phép một biến lưu trữ các giá trị liên quan như tên người, quốc tịch và tuổi tác cùng nhau.

  • 📦 Các kiểu dữ liệu khác nhau: Cấu trúc (struct) nhóm các biến có kiểu dữ liệu khác nhau dưới một tên do người dùng định nghĩa.
  • 🔑 Từ khóa struct: Định nghĩa một cấu trúc bằng từ khóa `struct`, sau đó liệt kê các thành viên bên trong dấu ngoặc nhọn.
  • 🧱 Tạo các thể hiện: Việc viết biến Person p tạo ra một biến cấu trúc và cấp phát bộ nhớ cho nó.
  • 🎯 Toán tử dấu chấm: Đọc hoặc thiết lập bất kỳ thành viên nào thông qua thể hiện, ví dụ như p.age = 27.
  • ➡️ Con trỏ và hàm: Cấu trúc hoạt động với con trỏ và được truyền cho hàm giống như một đối số thông thường.
  • 🤖 Hỗ trợ AI: GitHub Copilot và các trợ lý AI khác tạo cấu trúc định nghĩa và quyền truy cập thành viên từ một bình luận.

C++ Cấu trúc

Cấu trúc trong là gì C++?

Một STRECT là một C++ cấu trúc dữ liệu có thể được sử dụng để lưu trữ các phần tử của các kiểu dữ liệu khác nhau. TRONG C++Cấu trúc là một kiểu dữ liệu do người dùng định nghĩa. Cấu trúc tạo ra một kiểu dữ liệu cho nhóm.ping Các mục có kiểu dữ liệu khác nhau được gộp chung vào một kiểu dữ liệu duy nhất.

Ví dụ:

Giả sử bạn cần lưu trữ thông tin về ai đó, tên, quốc tịch và tuổi của họ. Bạn có thể tạo các biến như tên, quốc tịch và tuổi để lưu trữ dữ liệu riêng biệt.

Tuy nhiên, trong tương lai bạn có thể cần lưu trữ thông tin về nhiều người. Điều đó có nghĩa là sẽ cần tạo ra các biến cho từng cá nhân khác nhau. Ví dụ: name1, citizenship1, age1, v.v. Để tránh điều này, tốt hơn hết là nên tạo một struct.

Khi nào nên sử dụng Cấu trúc?

Dưới đây là một số lý do sử dụng cấu trúc trong C++.

  • Sử dụng cấu trúc khi bạn cần lưu trữ các phần tử của các kiểu dữ liệu khác nhau dưới một kiểu dữ liệu.
  • C++ cấu trúc là một loại giá trị chứ không phải là một loại tham chiếu. Sử dụng cấu trúc nếu bạn không có ý định sửa đổi dữ liệu của mình sau khi tạo.

C++ Khởi tạo cấu trúc

Để tạo ra một C++ cấu trúc, chúng tôi sử dụng từ khóa struct, theo sau là một mã định danh. Mã định danh trở thành tên của cấu trúc. Đây là cú pháp để tạo một C++ cấu trúc:

Cú pháp:

struct struct_name  
{  
     // struct members
}   

Trong cú pháp trên, chúng tôi đã sử dụng từ khóa struct. struct_name là tên của cấu trúc.

Các thành viên cấu trúc được thêm vào trong dấu ngoặc nhọn. Những thành viên này có thể thuộc về các loại dữ liệu khác nhau.

Ví dụ:

struct Person  
{  
    char name[30];  
     int citizenship;  
     int age;  
}  

Trong ví dụ trên, Person là một cấu trúc có ba thành viên. Các thành viên bao gồm tên, quốc tịch và tuổi. Một thành viên thuộc kiểu dữ liệu char, trong khi 2 thành viên còn lại là số nguyên khi cấu trúc được tạo, bộ nhớ không được cấp phát. Bộ nhớ chỉ được cấp phát sau khi một biến được thêm vào cấu trúc.

Tạo các thể hiện cấu trúc

Trong ví dụ trên, chúng ta đã tạo một cấu trúc có tên Person. Chúng ta có thể tạo một biến cấu trúc như sau:

Person p;

p là biến cấu trúc kiểu Person. Chúng ta có thể sử dụng biến này để truy cập các thành viên của cấu trúc.

Truy cập các thành viên cấu trúc

Để truy cập các thành viên cấu trúc, chúng ta sử dụng thể hiện của toán tử cấu trúc và dấu chấm (.). Ví dụ: để truy cập tuổi thành viên của struct Person:

p.age = 27;

Chúng ta đã truy cập tuổi thành viên của struct Person bằng cách sử dụng thể hiện của struct, p. Sau đó chúng tôi đã đặt giá trị của tuổi thành viên là 27.

Ví dụ 1:

#include <iostream>    
using namespace std;
struct Person
{
	int citizenship;
	int age;
};
int main(void) {
	struct Person p;
	p.citizenship = 1;
	p.age = 27;
	cout << "Person citizenship: " << p.citizenship << endl;
	cout << "Person age: " << p.age << endl;

	return 0;
}

Đầu ra:

Truy cập các thành viên cấu trúc

Đây là ảnh chụp màn hình của mã:

Truy cập các thành viên cấu trúc

Code Giải thích:

  1. Bao gồm tệp tiêu đề iostream trong chương trình của chúng tôi để sử dụng các hàm được xác định trong đó.
  2. Bao gồm không gian tên std để sử dụng các lớp của nó mà không cần gọi nó.
  3. Tạo một cấu trúc có tên Person.
  4. Sự khởi đầu của thân cấu trúc.
  5. Tạo một thành viên cấu trúc có tên là quyền công dân thuộc loại số nguyên.
  6. Tạo một thành viên cấu trúc có tên là tuổi kiểu số nguyên.
  7. Kết thúc phần thân cấu trúc.
  8. Gọi hàm main(). Logic chương trình phải được thêm vào trong phần thân của hàm này.
  9. Tạo một thể hiện của struct Person và đặt tên cho nó là p.
  10. Đặt giá trị quyền công dân của thành viên cấu trúc thành 1.
  11. Đặt giá trị của tuổi thành viên cấu trúc thành 27.
  12. In giá trị quyền công dân của thành viên cấu trúc trên bảng điều khiển cùng với một số văn bản khác.
  13. In giá trị của tuổi thành viên cấu trúc trên bảng điều khiển cùng với một số văn bản khác.
  14. Chương trình sẽ trả về một giá trị nếu chạy thành công.
  15. Kết thúc hàm main().

Con trỏ tới cấu trúc

Có thể tạo một con trỏ trỏ đến một cấu trúc. Nó tương tự như cách các con trỏ trỏ đến các kiểu dữ liệu gốc như int, float, double, v.v. được tạo ra. Lưu ý rằng một con trỏ trong C++ sẽ lưu trữ một vị trí bộ nhớ.

Ví dụ 2:

#include <iostream>
using namespace std;

struct Length
{
	int meters;
	float centimeters;
};

int main()
{
	Length *ptr, l;

	ptr = &l;

	cout << "Enter meters: ";
	cin >> (*ptr).meters;
	cout << "Enter centimeters: ";
	cin >> (*ptr).centimeters;
	cout << "Length = " << (*ptr).meters << " meters " << (*ptr).centimeters << " centimeters";

	return 0;
}

Đầu ra:

Con trỏ tới cấu trúc

Đây là ảnh chụp màn hình của mã:

Con trỏ tới cấu trúc

Code Giải thích:

  1. Bao gồm tệp tiêu đề iostream trong chương trình của chúng tôi để sử dụng các chức năng của nó.
  2. Bao gồm không gian tên std trong chương trình của chúng tôi để sử dụng các lớp của nó mà không cần gọi nó.
  3. Tạo một cấu trúc có tên là Chiều dài.
  4. Bắt đầu phần thân của chiều dài cấu trúc.
  5. Tạo một thành viên cấu trúc có tên là mét với kiểu dữ liệu số nguyên.
  6. Tạo một thành viên cấu trúc có tên centimet kiểu số nguyên.
  7. Phần cuối của phần thân của chiều dài cấu trúc.
  8. Gọi hàm main().
  9. Bắt đầu phần thân của hàm main().
  10. Tạo một biến con trỏ *ptr và biến bình thường l có kiểu Chiều dài.
  11. Lưu trữ địa chỉ của biến l trong biến con trỏ.
  12. Hiển thị thông báo trên bảng điều khiển, yêu cầu người dùng nhập giá trị cho các biến mét.
  13. Đọc giá trị người dùng nhập vào bằng bàn phím. Ở đây, các thước đo hàm thành viên được truy cập bằng cách sử dụng biến con trỏ.
  14. Hiển thị thông báo trên console, yêu cầu người dùng nhập giá trị centimét thay đổi.
  15. Đọc giá trị người dùng nhập vào bằng bàn phím. Ở đây, hàm thành viên centimet được truy cập bằng biến con trỏ.
  16. Hiển thị các giá trị được đọc từ người dùng trên bảng điều khiển cùng với một số văn bản khác.
  17. Chương trình phải trả về một giá trị khi thực hiện thành công.
  18. Phần cuối của hàm main().

Cấu trúc như đối số chức năng

Bạn có thể truyền một cấu trúc cho một hàm làm đối số. Việc này được thực hiện giống như cách truyền một đối số thông thường. Các biến cấu trúc cũng có thể được truyền vào hàm. Một ví dụ điển hình là khi bạn cần hiển thị giá trị của các thành viên cấu trúc. Hãy chứng minh điều này:

Ví dụ 3:

#include<iostream>
using namespace std;

struct Person
{
	int citizenship;
	int age;
};

void func(struct Person p);

int main()
{
	struct Person p;

	p.citizenship = 1;
	p.age = 27;

	func(p);
	return 0;
}
void func(struct Person p)
{
	cout << " Person citizenship: " << p.citizenship<<endl;
	cout << " Person age: " << p.age;
}

Đầu ra:

Cấu trúc như đối số chức năng

Đây là ảnh chụp màn hình của mã:

Cấu trúc như đối số chức năng

Code Giải thích:

  1. Bao gồm tệp tiêu đề iostream vào tệp của chúng tôi. Sau đó chúng ta sẽ sử dụng các chức năng của nó mà không gặp lỗi.
  2. Bao gồm không gian tên std trong chương trình của chúng tôi để sử dụng các lớp của nó. Chúng ta sẽ không cần gọi namespace để sử dụng các lớp của nó.
  3. Tạo một cấu trúc có tên Person.
  4. Bắt đầu phần thân của struct Person.
  5. Tạo một thành viên của struct Person. Thành viên được đặt tên là quốc tịch và có kiểu số nguyên.
  6. Tạo một thành viên của struct Person. Thành viên được đặt tên là tuổi và có kiểu số nguyên.
  7. Kết thúc phần thân của struct Person.
  8. Tạo một hàm lấy thể hiện của struct Person, p, làm đối số.
  9. Gọi hàm chính. { đánh dấu phần bắt đầu của phần thân hàm main().
  10. Tạo một thể hiện của struct Person và đặt tên cho nó là p.
  11. Truy cập quyền công dân của biến thành viên cấu trúc bằng cách sử dụng phiên bản của cấu trúc p và gán cho nó giá trị 1.
  12. Truy cập biến thành viên cấu trúc age bằng cách sử dụng thể hiện của cấu trúc p và gán cho nó giá trị 27.
  13. Gọi hàm và truyền cho nó thể hiện của struct Person, p, làm đối số.
  14. Hàm phải trả về một giá trị khi thực hiện thành công.
  15. Phần cuối của hàm main().
  16. Tạo phần thân của hàm.
  17. Sự bắt đầu của phần thân của hàm.
  18. Truy cập giá trị quyền công dân của thành viên cấu trúc và in nó trên bảng điều khiển cùng với văn bản khác.
  19. Truy cập giá trị tuổi của thành viên cấu trúc và in nó trên bảng điều khiển cùng với văn bản khác.
  20. Kết thúc phần thân hàm.

Hạn chế của một C++ cấu trúc

Sau đây là những hạn chế của cấu trúc:

  • Kiểu dữ liệu struct không thể được xử lý như kiểu dữ liệu có sẵn.
  • Operacác công cụ như + - và các công cụ khác không thể sử dụng được trên biến cấu trúc.
  • Cấu trúc không hỗ trợ ẩn dữ liệu. Các thành viên của cấu trúc có thể được truy cập bởi bất kỳ chức năng nào bất kể phạm vi của nó.
  • Các thành viên tĩnh không thể được khai báo bên trong thân cấu trúc.
  • Các nhà xây dựng không thể được tạo bên trong một cấu trúc.

Câu Hỏi Thường Gặp

In C++ Cấu trúc (struct) và lớp (class) gần như giống hệt nhau. Sự khác biệt thực sự duy nhất là quyền truy cập mặc định: các thành viên của cấu trúc mặc định là public, trong khi các thành viên của lớp là private. Cả hai đều hỗ trợ các hàm thành viên, hàm tạo và kế thừa.

Cấu trúc AC chỉ chứa dữ liệu, và bạn phải viết từ khóa struct trước mỗi lần khai báo biến. C++ Cấu trúc cũng có thể bao gồm các hàm thành viên, hàm tạo và các bộ chỉ định truy cập, và từ khóa `struct` là tùy chọn khi khai báo biến.

Khai báo cấu trúc, sau đó định nghĩa một mảng của nó, ví dụ: Person people[3]. Mỗi phần tử là một cấu trúc hoàn chỉnh và bạn truy cập các thành viên bằng people[0].age. Mảng cấu trúc lưu trữ nhiều bản ghi cùng loại với nhau.

Cấu trúc lồng nhau là một cấu trúc được khai báo như một thành viên bên trong một cấu trúc khác. Nó nhóm các dữ liệu con có liên quan, chẳng hạn như cấu trúc Ngày được đặt bên trong cấu trúc Nhân viên. Bạn có thể truy cập các thành viên bên trong bằng cách sử dụng toán tử dấu chấm nối tiếp.

Kích thước của nó xấp xỉ tổng kích thước của các thành viên, cộng thêm phần đệm mà trình biên dịch thêm vào để căn chỉnh, vì vậy `sizeof` có thể vượt quá tổng kích thước thực tế. Các hàm thành viên không thêm gì cả. Việc sắp xếp các thành viên theo kích thước giúp giảm thiểu phần đệm thừa.

Hãy sử dụng toán tử mũi tên khi bạn giữ một con trỏ đến một cấu trúc. Thay vì (*ptr).age, cú pháp viết tắt ptr->age sẽ đọc cùng một thành viên. Toán tử dấu chấm hoạt động trên một thể hiện trực tiếp, không phải con trỏ.

Đúng vậy. Trợ lý lập trình AI có thể chuyển một lời nhắc hoặc nhận xét ngắn gọn thành một đoạn mã hoàn chỉnh. C++ Cấu trúc, bao gồm các thành viên, hàm tạo và truy cập trường. Luôn luôn xem xét lại các kiểu dữ liệu và sự phù hợp được tạo ra, vì AI có thể bỏ sót các yêu cầu cụ thể của dự án.

Vâng. Trợ lý GitHub Công cụ này gợi ý định nghĩa cấu trúc, biến thành viên và truy cập bằng dấu chấm hoặc mũi tên khi bạn gõ trong trình soạn thảo. Nó xử lý tốt các đoạn mã lặp đi lặp lại, mặc dù bạn vẫn nên kiểm tra kiểu dữ liệu, phần đệm và logic trước khi biên dịch.

Tóm tắt bài viết này với: