Không giống như một mảng, một cấu trúc có thể chứa nhiều kiểu dữ liệu khác nhau (int, string, bool, v.v.).

cpp-kieu-cau-truc.png (22 KB)

1/ Tạo một cấu trúc

Cú pháp:

struct {            
  [kiểu dữ liệu] [tên phần tử 1];        
  [kiểu dữ liệu] [tên phần tử 2];
  ...
  [kiểu dữ liệu] [tên phần tử n];
} [tên cấu trúc];

Trường hợp tạo nhiều cấu trúc cùng một lúc thì các em có thể dùng có pháp sau:

struct {            
  [kiểu dữ liệu] [tên phần tử 1];        
  [kiểu dữ liệu] [tên phần tử 2];
  ...
  [kiểu dữ liệu] [tên phần tử n];
} [tên cấu trúc 1], [tên cấu trúc 2], [tên cấu trúc n];

Trong đó:

  • struct: là từ khóa để tạo một cấu trúc
  • kiểu dữ liệu: int, char, boolean... mà chúng ta đã học ở bài Các kiểu dữ liệu trong C++
  • tên phần tử: các em đặt tên đừng để trùng nhau trong một cấu trúc, cách đặt tên giống mục "Định danh" trong bài Biến trong C++
  • tên cấu trúc: tên của cấu trúc, cách đặt tên giống mục "Định danh" trong bài Biến trong C++

Ví dụ:

struct {
    int so1;
    int so2;
    string chuoi1;
    string chuoi2;
} cauTruc;

2/ Truy cập các phần tử trong cấu trúc

Cú pháp: 

[tên cấu trúc].[tên phần tử]

Ví dụ 1:

#include <iostream>
#include <string>
using namespace std;

int main() {
  struct {
    int so1;
    int so2;
    string chuoi1;
    string chuoi2;
  } cauTruc;
  // Truy cap cac phan tu
  cauTruc.so1 = 1; // gan phan tu so1 = 1
  cauTruc.so2 = 2;
  cauTruc.chuoi1 = "Chao buoi sang";
  cauTruc.chuoi2 = "Chuc mot ngay tot lanh";

  cout << cauTruc.so1 << "\n";
  cout << cauTruc.so2 << "\n";
  cout << cauTruc.so1 + cauTruc.so2 << "\n";
  cout << cauTruc.chuoi1 << "\n";
  cout << cauTruc.chuoi2;
  return 0;
}

Ví dụ 2:

struct {
    int so;
    string chuoi;
} cauTruc1, cauTruc2;

cauTruc1.so = 1;
cauTruc2.so = 2;
cauTruc1.chuoi = "Chao buoi sang";
cauTruc2.chuoi = "Chuc mot ngay tot lanh";

cout << cauTruc1.so << "\n";
cout << cauTruc2.so << "\n";
cout << cauTruc1.chuoi << "\n";
cout << cauTruc2.chuoi;

3/ Kiểu dữ liệu cấu trúc

Bằng cách đặt tên cho cấu trúc, các em có thể coi nó như một kiểu dữ liệu.

Cú pháp:

struct [tên dữ liệu cấu trúc] {            
  [kiểu dữ liệu] [tên phần tử 1];        
  [kiểu dữ liệu] [tên phần tử 2];
  ...
  [kiểu dữ liệu] [tên phần tử n];
};
  • tên dữ liệu cấu trúc: cách đặt tên giống mục "Định danh" trong bài Biến trong C++

Ví dụ:

#include <iostream>
#include <string>
using namespace std;

// Khai bao mot cau truc ten traiCay
struct traiCay {
  string ten;
  int soLuong;
};

int main() {
  // Tao cau truc kieu traiCay thu nhat;
  traiCay traiCayNhietDoi;
  traiCayNhietDoi.ten = "Xoai";
  traiCayNhietDoi.soLuong = 2;

  // Tao cau truc kieu traiCay thu hai;
  traiCay traiCayOnDoi;
  traiCayOnDoi.ten = "Tao";
  traiCayOnDoi.soLuong = 1;
 
  // Xuat cac phan tu ra man hình
  cout << "Ten" << "\t " << "So luong" << "\n";
  cout << traiCayNhietDoi.ten << "\t  " << traiCayNhietDoi.soLuong << "\n";
  cout << traiCayOnDoi.ten << "\t  " << traiCayOnDoi.soLuong << "\n";
 
  return 0;
}

4/ Cấu trúc và mảng

Trong nhiều ứng dụng, sự kết hợp của cấu trúc và mảng giúp chúng ra có thể quản lý được danh sách dữ liệu một cách dễ dàng.

Ví dụ

#include <iostream>
#include <string>
using namespace std;

// Khai bao mot cau truc ten traiCay
struct traiCay {
  string ten;
  int soLuong;
};

int main() {
  // Tao mang kieu cau truc
  traiCay traiCayNhietDoi[10];
  for (int i = 0; i < 10; i++) {
   traiCayNhietDoi[i].ten = "Trai cay " + std::to_string(i);
   traiCayNhietDoi[i].soLuong = i;
  }

  for (int i = 0; i < 10; i++) {
   cout << traiCayNhietDoi[i].ten << "\t";
   cout << traiCayNhietDoi[i].soLuong << "\n";
  }

  return 0;
}

Kết quả:

Trai cay 0	0
Trai cay 1	1
Trai cay 2	2
Trai cay 3	3
Trai cay 4	4
Trai cay 5	5
Trai cay 6	6
Trai cay 7	7
Trai cay 8	8
Trai cay 9	9