1. Truy xuất dữ liệu trong kiểu cấu trúc (struct) trong C++
Truy xuất các trường dữ liệu trong kiểu cấu trúc thông qua toán tử thành phần cấu trúc . hay còn gọi là toán tử chấm (dot operation).
Cú pháp
<tên biến cấu trúc>.<tên thành phần>
Ví dụ:
struct DIEM
{
int x;
int y;
};
DIEM d1 = {19, 20};
cout<<"Toa do cua diem d1 la ("<<d1.x<<", "<<d1.y<<")";
2. Gán dữ liệu cho các thành phần trong cấu trúc
Gán biến cấu trúc này cho biến cấu trúc kia (phải cùng kiểu cấu trúc)
Cú pháp: <biến cấu trúc đích> = <biến cấu trúc nguồn>;
Gán thành phần của biến cấu trúc bằng giá trị cụ thể
Cú pháp: <biến cấu trúc đích>.<tên thành phần> = <giá trị>;
Ví dụ:
struct DIEM
{
int x;
int y;
};
DIEM d1 = {19, 20};
DIEM d2, d3;
d2 = d1;//gán biến cấu trúc này cho biến cấu trúc kia
d3.x = 99;//gán các thành phần cấu trúc bằng giá trị
d3.y = 101;
3. Cấu trúc phức tạp
Thành phần của cấu trúc là một cấu trúc khác
#include <iostream>
using namespace std;
struct POINT
{
int x;
int y;
};
struct TRIANGLE
{
POINT p1;
POINT p2;
POINT p3;
};
int main() {
POINT d1 = {-1, 0};
POINT d2 = {0, 2};
POINT d3 = {2, 0};
TRIANGLE t1;
t1.p1 = d1;
t1.p2 = d2;
t1.p3 = d3;
cout<<"Coordinates of 3 points in triangle t1:"<<endl;
cout<<"("<<t1.p1.x<<", "<<t1.p1.y<<")"<<endl;
cout<<"("<<t1.p2.x<<", "<<t1.p2.y<<")"<<endl;
cout<<"("<<t1.p3.x<<", "<<t1.p3.y<<")"<<endl;
system("pause");
}
Kết quả
Coordinates of 3 points in triangle t1:
(-1, 0)
(0, 2)
(2, 0)
Thành phần của cấu trúc là mảng
#include <iostream>
using namespace std;
struct POINT
{
int x;
int y;
};
struct TRIANGLE
{
POINT p_array[3];
};
int main() {
TRIANGLE t1;
cout<<"Input 3 points of triangle t1:";
for(int i=0;i<3;i++){
cout<<endl<<"Input point "<<i+1<<endl;
cout<<"x:";
cin>>t1.p_array[i].x;
cout<<"y:";
cin>>t1.p_array[i].y;
}
cout<<"Coordinates of 3 points in triangle t1:"<<endl;
cout<<"("<<t1.p_array[0].x<<", "<<t1.p_array[0].y<<")"<<endl;
cout<<"("<<t1.p_array[1].x<<", "<<t1.p_array[1].y<<")"<<endl;
cout<<"("<<t1.p_array[2].x<<", "<<t1.p_array[2].y<<")"<<endl;
system("pause");
}
Kết quả
Input 3 points of triangle t1:
Input point 1
x:-1
y:0
Input point 2
x:0
y:2
Input point 3
x:2
y:0
Coordinates of 3 points in triangle t1:
(-1, 0)
(0, 2)
(2, 0)
4. Kích thước của struct
Trong bài Các kiểu dữ liệu cơ bản trong C++, các bạn đã biết cách sử dụng hàm sizeof() để xem kích thước của kiểu dữ liệu. Khi một kiểu dữ liệu cấu trúc (struct) được định nghĩa thì nó cũng là một kiểu dữ liệu.
Vậy thì kích thước của kiểu dữ liệu cấu trúc là bao nhiêu? Chúng ta hãy viết một chương trình in kích thước của kiểu dữ liệu cấu trúc để trả lời câu hỏi trên.
#include <iostream>
using namespace std;
struct POINT
{
int x;
int y;
};
struct TRIANGLE
{
POINT p1;
POINT p2;
POINT p3;
};
struct STUDENT
{
string id;
string name;
string birthday;
bool gender;
float math, physics, chemistry;
};
int main() {
cout << "Size of POINT is: " << sizeof(POINT) <<" byte"<< endl;
cout << "Size of TRIANGLE is: " << sizeof(TRIANGLE) <<" byte"<< endl;
cout << "Size of STUDENT is: " << sizeof(STUDENT) <<" byte"<< endl;
system("pause");
}
Kết quả trên hệ thống 32 bit
Size of POINT is: 8 byte
Size of TRIANGLE is: 24 byte
Size of STUDENT is: 112 byte
Nhận xét:
Cấu trúc POINT có 2 kiểu int thì kích thước kiểu POINT là 8 byte.
Cấu trúc TRIANGLE có 3 kiểu POINT, mỗi kiểu POINT 8 byte thì kích thước kiểu TRIANGLE là 24 byte.
Cấu trúc STUDENT có 3 kiểu string, mỗi kiểu string 32 byte, có 1 kiểu bool với 1 byte, có 3 kiểu float với 4 byte. Tổng cộng là 109 byte. Nhưng chương trình in ra kiểu STUDENT có 112 byte. Những byte được thêm vào (3 byte) gọi là byte đệm (padding byte) để giúp các thành phần dữ liệu trong cấu trúc được truy xuất nhanh hơn.
- Sử dụng hàm isset() trong PHP để kiểm tra một biến có tồn tại hay không?
- Truyền tham trị và tham chiếu cho phương thức trong Java
- Khái niệm đa hình (polymorphism) trong lập trình hướng đối tượng
- Lớp string trong C++ và các hàm thường dùng của lớp string
- Khai báo và sử dụng con trỏ đối tượng trong C++