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

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

A CẤU TRÚC 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à 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 để nhóm các mục thuộc các kiểu dữ liệu khác nhau dưới 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, bạn có thể cần lưu trữ thông tin về nhiều người trong tương lai. Nó có nghĩa là các biến cho các cá nhân khác nhau sẽ được tạo ra. Ví dụ: tên1, quyền công dân1, tuổi1, v.v. Để tránh điều này, tốt hơn là tạo một cấu trúc.

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

Giải thích mã:

  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

Giải thích mã:

  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

Giải thích mã:

  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.

Tổng kết

  • Cấu trúc là một cấu trúc dữ liệu lưu trữ các phần tử dữ liệu thuộc các loại khác nhau.
  • Trong khi mảng lưu trữ các phần tử dữ liệu cùng loại, thì cấu trúc lưu trữ các phần tử dữ liệu thuộc các loại khác nhau.
  • Nên sử dụng cấu trúc khi các phần tử dữ liệu không được mong đợi thay đổi giá trị.
  • Các thành viên của cấu trúc được truy cập bằng toán tử dấu chấm (.).
  • Chúng ta phải tạo một thể hiện của cấu trúc.
  • Để tạo ra một C++ struct, chúng ta sử dụng từ khóa struct.
  • Con trỏ trỏ đến một cấu trúc được tạo tương tự như cách tạo con trỏ trỏ đến các kiểu thông thường.
  • Một cấu trúc có thể được truyền dưới dạng đối số cho một hàm giống như cách truyền các hàm thông thường.