1. Bo mon MMT&TT 1
Lập trình hướng đối
tượng C++
Giảng viên giảng dạy
Nguyễn Hữu Vân Long
2. Bo mon MMT&TT 2
Chương 1
Các đặc điểm của C++
p Các khái niệm cơ bản của C++
p Lập trình cấu trúc trong C++
p Các đặc điểm mới của C++
3. Bo mon MMT&TT 3
Nội dung bài giảng
Giới thiệu
Các khái niệm cơ bản trong C++
Cấu trúc điều khiển
Hàm và cấu trúc chương trình
Tham số mặc nhiên của hàm
Con trỏ và chuỗi ký tự
Tái định nghĩa hàm
Hàm tại chổ (inline)
Con trỏ/Tham chiếu
Truyền tham số
Structure
4. Bo mon MMT&TT 4
Giới thiệu
C++
Là một tập “cha” (superset) của C.
Hỗ trợ cho lập trình hướng đối tượng
Một số trình biên dịch C++
TurboC (win)
BorlandC (win)
Gcc (win + linux)
Microsoft C (win)
…
5. Bo mon MMT&TT 5
Các khái niệm cơ bản
Từ khóa (Keywords)
Thông thường là chữ thường.
Dành riêng cho ngôn ngữ không được dùng đặt tên
VD : char, int, return, for, else, const,
static
Tên/Định danh (Identifier)
Tên biến, tên hàm, tên kiểu dữ liệu do người dùng
định nghĩa...được gọi chung là những định danh.
Phân biệt chữ HOA và chữ thường.
Gồm chữ, số, ‘_’ và phải bắt đầu bằng chữ cái.
Độ dài tối đa là 32.
VD: x, hoten, a1, num_of_var, Delta,
TEN, ...
6. Bo mon MMT&TT 6
Kiểu dữ liệu
Các khái niệm cơ bản
Tên kiểuTên kiểu Kích thướcKích thước Phạm viPhạm vi
char 1 byte -128 127
unsigned char 1 byte 0 255
int 2 bytes -32768 32767
unsigned int 2 bytes 0 65535
short 2 bytes 0 65535
long 4 bytes -2
31
2
31
- 1
unsigned long 4 bytes 0 2
32
- 1
float 4 bytes 1.2e
-38
3.4e
38
double 8 bytes 2.2e
-308
1.8e
308
7. Bo mon MMT&TT 7
Biến (Variable)
Dùng để lưu trữ dữ liệu xử lý trong chương trình
Tên biến: Đặt theo quy tắc tên định danh
Khai báo : bất kỳ vị trí nào trong chương trình
Khởi tạo : có thể vừa khai báo và khởi tạo
Cú pháp <kiểu DL> <{<tên biến>[=giá trị]}[,…n]>;
VD:int x=5, y=10;
for(int i=0,tong=0;i<10;i++) tong +=i;
Phạm vi của biến
VD: if( delta >0 ) {
float x1= (-b +sqrt(delta)) / (2*a);
float x2= (-b - sqrt(delta)) / (2*a); ...}
Các khái niệm cơ bản
8. Bo mon MMT&TT 8
Biến (Variable)
Biến toàn cục : có tác dụng trong toàn bộ CT.
Biến địa phương (cục bộ): chỉ có tác dụng trong phạm vi
của nó.
VD: int so = 5;
void GanSo(int x) {
so = x;}
int NuaSo(int x) {
int c=2, so =x/c ;
return so;}
Các khái niệm cơ bản
9. Bo mon MMT&TT 9
Hằng (Constant)
Khai báo
VD: #define MAX 100
const int MAX=100;
Một số hằng quan trọng
Số nguyên: 10 , -5, 300000, 1000L, …
Số thực : 3.1416, .5 , 123E-5, …
Ký tự : char ch1 = ‘A’ , ch2=97;
Chuỗi ký tự :
char *str=“Chuoi Ky Tu”;
char chuoi[50]; strcpy(chuoi,“ ”);
if ( strcmp(chuoi,“”)==0)
cout << “Chuoi rong”;
Các khái niệm cơ bản
10. Bo mon MMT&TT 10
Kiểu
Chuyển đổi kiểu/Ép kiểu (Type Casting)
Mặc nhiên/Không tường minh (implicit) tự động
float x = 123.4;
int y = x;
float z = x – y;
Tường minh – Do người lập trình sử dụng (Explicit)
Cú pháp: ( Kiểu ) biểu thức hoặc Kiểu ( biểu
thức )
float x = 3.1416;
int y= (int) x;
Các khái niệm cơ bản
double to float
float to int
int to float
11. Bo mon MMT&TT 11
Các phép toán (Operators)
Các khái niệm cơ bản
Phép toán Toán tử
Số học +, -, *, /, %, ++, --
Quan hệ ==, !=, >, <, >=, <=
Logic &&, ||, !
Gán =, +=, -=, *=, /=, %=
<<=, >>=, &=, |=, ^=
Con trỏ, struct *, &, ., ->
Điều kiện (e1) ? e2 : e3
Lấy kích thước sizeof
Bộ nhớ new, delete
Bitwise &, |, ^
Ví dụ:
int i=1000, s;
s = sizeof(i); s=2
int *p;
p = new int[10];
delete p;
max = (a>b) ? a : b;
12. Bo mon MMT&TT 12
Mảng
1 dãy các phần tử cùng kiểu
Khai báo mảng có n phần tử
<Kiểu> <Tên mảng> [<Kích thước>];
VD : int m[10]; float ds[MAX];
Thứ tự phần tử : từ 0 đến (kích thước -1)
Truy xuất một phần tử của mảng: <tên mảng>[chỉ số]
VD: // CT tính tổng của 10 số Fibonacci đầu
tiên
long a[10]; a[0]=a[1]=1;
for (int i=2; i<10 ; i++)
a[i] = a[i-1] + a[i-2];
long tong=0;
for(i=0 ; i<10 ; i++) tong+=a[i];
Các khái niệm cơ bản
13. Bo mon MMT&TT 13
Chú thích
Trên 1 dòng :
// chú thích trên 1 dòng
Trên nhiều dòng :
/* chú thích trên nhiều dòng */
Các chỉ thị tiền biên dịch :
# define # undefine # include
# if # else # endif
# if # elif # else # endif
# ifdef # else # endif
# ifndef # else # endif
# error
Các khái niệm cơ bản
14. Bo mon MMT&TT 14
Trong C++, nhập/xuất được thực hiện thông qua khái
niệm luồng (stream).
Luồng: dòng dữ liệu
Thư viện hàm: <iostream.h>
Toán tử xuất (insertion): <<
Toán tử nhập (extraction): >>
Luồng xuất chuẩn: cout (màn hình)
Luồng nhập chuẩn: cin (bàn phím)
Nhập xuất trong C++
nhập >>
nguồn
đích
15. Bo mon MMT&TT 15
Ưu điểm
Đơn giản: không cần sử dụng chuỗi
định dạng.
Có thể tái định nghĩa các toán tử
nhập, xuất để nhập xuất các kiểu
dữ liệu do người dùng định nghĩa
Cú pháp
Nhập : std::cin >> Biến
Xuất : std::cout << (Biểu thức)
Các kiểu dữ liệu có thể nhập xuất
char , int, unsigned, long,
unsigned long, …
float, double, char* , char []
(void*): lấy địa chỉ đầu của chuỗi
Nhập xuất trong C++
#include <iostream.h>
void main() {
cout << “Hello world”;
}
#include <iostream.h>
void main() {
int a, b, max;
cout << “Nhap a: ”;
cin >> a;
cout << “Nhap b: ”;
cin >> b;
max = (a>b)? a : b;
cout << “Max(a, b)= ”
<< max;
}
16. Bo mon MMT&TT 16
Nhập xuất
Một số hàm định dạng toàn cục:
cin.width(n)
cout.width(n)
cout.precision(n)
cin.seekg(n)
Ký tự đặc biệt : n, t, 0, b, r
Định dạng khác: endl, ends, flush, …
Nhập chuỗi :
gets(char* str);
cin.getline(char* str, int n);
Nhập xuất trong C++
17. Bo mon MMT&TT 17
Tuần tự: các lệnh được thực hiện 1 cách tuần tự
Câu lệnh đơn: viết trên một hay nhiều dòng
Khối lệnh :
Là dãy các lệnh viết trong cặp { }
Tương đương với 1 câu lệnh đơn
Giá trị của biểu thức điều kiện
Bằng 0 : <=> SAI
Khác 0 : <=> đúng
Rẽ nhánh (braching, decision making): dùng để quyết
định sự thực hiện một khối lệnh dựa vào giá trị của một biểu
thức điều kiện.
Lặp (loop): dùng để thực hiện lặp lại một khối lệnh trong khi
một điều kiện nào đó được thỏa mãn.
Cấu trúc điều khiển
18. Bo mon MMT&TT 18
Cấu trúc điều khiển
Rẽ nhánh
Lệnh if ... else
if (bthức đkiện)
Lệnh 1;
[else
Lệnh 2;
]
Lệnh switch … case:
switch (biểu thức) {
case <gtrị 1>:
Lệnh 1; break;
case <gtrị 2>:
Lệnh 2; break;
...
case <gtrị n>:
Lệnh n; break;
[default:
Lệnh n+1; ]
}
Chú ý:
l
Biểu thức trong lệnh switch
phải là biểu thức tương thích
với kiểu int.
l
Lệnh switch luôn dùng phép
so sánh bằng (==)
19. Bo mon MMT&TT 19
Lệnh lặp
Lệnh while:
while (bthức đkiện)
Lệnh;
Lệnh do … while:
do
Lệnh;
while (bthức đkiện)
Lệnh for:
for (e1; e2; e3)
Lệnh;
Cấu trúc điều khiển
//Ctrình giải PTBN
int a, b;
float x;
char tieptuc=‘n’;
do {
//nhap a, b
//giai PTBN
printf(“Ban muon tiep tuc?”);
scanf(“%c”, &tieptuc);
} while (tieptuc==‘y’);
20. Bo mon MMT&TT 20
Từ khóa break: Thoát ra khỏi lệnh switch và các lệnh lặp.
Từ khóa continue: Trở về đầu vòng lặp.
Cấu trúc điều khiển
printf(“Nhap n (<>0): ”);
scanf(“%s”, &str);
if (!(n = atoi(str))) {
printf(“Nhap ko hop le!”);
continue;
}
printf(“%d^2=%d”, n, n*n);
//Ctrình tính bình phương một số
char str[5];
int n;
char tieptuc=‘n’;
do {
...
printf(“Ban muon tiep tuc?”);
scanf(“%c”, &tieptuc);
} while (tieptuc=‘y’);
21. Bo mon MMT&TT 21
Hàm
<Kiểu trả về> <Tên hàm> (Danh sách kiểu và tham số)
{ [ Khai báo dữ liệu cục bộ ]
[ Thân hàm ]
[ Câu lệnh return ]
}
VD: int Max ( int x, int y) {
int somax;
somax = (x>y) ? x : y;
return somax;
}
Hàm và cấu trúc chương trình
22. Bo mon MMT&TT 22
Hàm: Khai báo prototype
<Kiểu trả về> <Tên hàm> ( Danh sách kiểu );
int Max ( int , int );
int Min ( int , int );
void main()
{
int a =10 , b =5;
cout<<“So max=” << Max(a,b)<< endl;
cout<<“So min=” << Min(a,b)<< endl;
}
int Max ( int x , int y) { ... }
int Min ( int x , int y) { ... }
Hàm và cấu trúc chương trình
Khai báo
hàm
Định nghĩa
hàm
Hàm phải được khai báo
hoặc định nghĩa trước khi
sử dụng!
23. Bo mon MMT&TT 23
Hàm
Cách gọi : Tên hàm(tham số theo thứ tự từ trái sang)
Tham số và đối số:
int Max ( int x, int y) {
if(x>y) return x;
return y; }
void main() {
int a =10 , b = 5;
cout<<“So max= “<< Max ( a , b ) << endl; }
Hàm và cấu trúc chương trình
Tham số (hình thức)
Đối số
(Tham số thực tế)
24. Bo mon MMT&TT 24
Cấu trúc chương trình
Chương trình theo dạng lập trình cấu trúc gồm tập hợp
nhiều hàm độc lập nhau.
Hàm main() là hàm thực thi.
Một chương trình chỉ có thể có 1 hàm main() duy nhất.
Dạng chung :
Hàm và cấu trúc chương trình
# include < Thư viện hàm >
Khai báo prototype;
Khai báo dữ liệu toàn cục
Định nghĩa các hàm đã khai báo.
Định nghĩa hàm main().
25. Bo mon MMT&TT 25
Khái niệm
Là 1 đối tượng dữ liệu lưu địa chỉ của 1 DTDL khác.
Kích thước con trỏ = 1 ô nhớ của hệ điều hành.
Trên MS-DOS, kích thước của con trỏ là 2 bytes.
Khai báo : < Kiểu> *<Tên con trỏ>;
VD: long x = 20;
long *y = &x;
Các phép toán
Địa chỉ : &y
Giá trị : y
Giá trị dữ liệu mà con trỏ đang trỏ tới : *y
Con trỏ
20
1035H
x
1035
1080H
*y
26. Bo mon MMT&TT 26
Cách tính địa chỉ
int x=10; // Chẳng hạn biến x đang ở địa chỉ 1000
int *px = &x; // px =1000
<=> int *px; px = &x;
(*px)++; // Gán x=11
px++; // px = 1002 vì px là con trỏ kiểu int
px +=n; // px đang trỏ đến địa chỉ (1002 + 2*n )
Cấp vùng nhớ : Con trỏ = new <Kiểu> [ Số lượng ];
Ví dụ: int *px= new int;
long *py= new long[20];
Thu hồi vùng nhớ : delete <con trỏ>;
Ví dụ: delete px;
delete[] py;
Con trỏ
27. Bo mon MMT&TT 27
Con trỏ và mảng
Con trỏ là 1 mảng động => kích thước có thể thay đổi.
Mảng như là 1 con trỏ nhưng độ lớn vùng nhớ cố định.
Con trỏ
float *ds; int n;
cout << “Nhap so luong n = ”; cin >> n;
ds = new float [n];
for (int i=0; i<n; i++) {
cout << “Phan tu ” << i+1 << “ : ”;
cin >> ds[i];
}
cout << “Danh sach vua nhap :” << endl;
for(i=0; i<n; i++) cout << ds[i] << “t” ;
delete[] ds;
Cách sử dụng mảng và con trỏ gần như giống nhau
Cấp vùng nhớ
vừa đủ
cho con trỏ
Thu hồi lại
vùng nhớ
28. Bo mon MMT&TT 28
Phân biệt mảng con trỏ và con trỏ đến mảng
Con trỏ
Mảng gồm 10 con trỏ Con trỏ đến 1 mảng
10 phần tử kiểu int
29. Bo mon MMT&TT 29
Con trỏ đến con trỏ
Tương tự (tổng quát hơn) mảng nhiều chiều.
Cẩn thận khi cấp vùng nhớ.
Con trỏ
30. Bo mon MMT&TT 30
Là con trỏ đặc biệt dùng để trỏ đến địa chỉ mã lệnh thực thi
của 1 hàm.
Khai báo con trỏ đến hàm phải đặt trong cặp dấu ngoặc.
(*p):
int (*p1) (const char *, const char *);
long (*p2) (int a, int b);
Thường dùng con trỏ này để gọi 1 hàm và gửi hàm đó như
là 1 đối số đến 1 hàm khác.
void check(char *a, char *b,
int (*cmp)(const char *, const char *));
Gọi hàm:
check(“abc”,”ABC”, strcmp);
Con trỏ
31. Bo mon MMT&TT 31
Ví dụ
Con trỏ
Gọi hàm check sử dụng con trỏ đến
hàm như là 1 đối số
32. Bo mon MMT&TT 32
Có thể trỏ đến bất kỳ loại dữ liệu nào.
Phải dùng phép ép kiểu khi thay đổi.
Con trỏ void*
33. Bo mon MMT&TT 33
Chuỗi ký tự
Là 1 mảng ký tự hay con trỏ ký tự
=> truy xuất phần tử của chuỗi tương tự như mảng.
VD: char chuoi1[20], *chuoi2;
char c = chuoi1[0];
Phải cấp vùng nhớ cho chuỗi dạng con trỏ.
VD: chuoi2 = new char [50];
Chuỗi sẽ được đánh dấu bởi ký tự kết thúc : ‘0’
Hàm nhập chuỗi :
gets(chuoi2);
cin.getline(chuoi2, 49);
In chuỗi ra màn hình: cout<<chuoi1<<chuoi2;
Con trỏ và chuỗi ký tự
34. Bo mon MMT&TT 34
Chuỗi ký tự
Một số hàm xử lý chuỗi trong <string.h>:
Copy chuỗi: char* strcpy (char* s1, char* s2);
Tạo bản sao: char* strdup (char* s1);
Chiều dài: int strlen (char* s);
So sánh: int strcmp (char* s1, char* s2);
Ghép chuỗi: char* strcat (char* s1, char* s2);
Đảo ngược: char* strrev (char* s);
Đổi sang HOA: char* strupr (char* s);
Đổi sang thường: char* strlwr (char* s);
Gán n ký tự c: char* strnset (char* s, int c , int n);
Con trỏ và chuỗi ký tự
35. Bo mon MMT&TT 35
Mục đích
Gán các giá trị mặc nhiên cho các tham số của hàm.
Ưu điểm
Không cần phải hiểu rõ ý nghĩa tất cả các tham số --> đơn
giản hóa việc sử dụng hàm
Có thể giảm được số lượng hàm cần định nghĩa.
Quy tắc
Tất cả các tham số mặc nhiên đều phải đặt ở cuối hàm.
Chỉ thiết đặt trong prototype hoặc định nghĩa hàm, không
được đặt trong cả hai.
Khai báo
<kiểu DL> <tên đối số> = <giá trị mặc nhiên>
Tham số mặc nhiên
36. Bo mon MMT&TT 36
Gọi hàm có tham số mặc nhiên
Nếu cung cấp giá trị cho đối số dùng tham số truyền vào.
Nếu không đủ tham số dùng giá trị mặc nhiên.
Ví dụ:
Tham số mặc nhiên
void HamThu(int =0, int =1);
void main() {
int x=10, y=20;
cout<< “Goi ham Thu 4 lan, ta duoc : << endl;
HamThu(x,y);
HamThu(x);
HamThu(y);
HamThu();
}
void HamThu(int a, int b) {
cout << “tham so 1 = ” << a << endl;
cout << “tham so 2 = ” << b << endl;
}
37. Bo mon MMT&TT 37
Ví dụ
Tham số mặc nhiên
MessageBox( LPCTSTR lpszText,
LPCTSTR lpszCaption = NULL,
UINT nType = MB_OK )
MessageBox(“Hien thi thong bao ra man hinh");
MessageBox( “Chuc nang khong su dung duoc",
“Bao loi“ );
Có thể gọi hàm theo các dạng sau:
MessageBox( “Ban muon thoat khoi chuong trinh?",
“Thong bao“,
MB_YESNO | MB_ICONASTERISK );
37
Hàm thể hiện 1 cửa sổ thông báo trong Visual C++
38. Bo mon MMT&TT 38
Khái niệm
Tái định nghĩa hàm: định nghĩa các hàm trùng tên.
Quy tắc tái định nghĩa
Các hàm trùng tên phải khác nhau về tham số:
Số lượng
Thứ tự
Kiểu
Quy tắc gọi hàm
Tìm hàm có kiểu tham số phù hợp.
Dùng phép ép kiểu tự động.
Tìm hàm gần đúng (phù hợp) nhất.
Tái định nghĩa hàm
39. Bo mon MMT&TT 39
Tái định nghĩa hàm
Định nghĩa hàm:
int Max (int a, int b) { return (a>b) ? a : b; }
float Max (float a, float b) { return (a>b) ? a : b; }
SinhVien Max(SinhVien a, SinhVien b)
{ return (a.diemtb > b.diemtb) ? a : b;}
Gọi hàm:
int x1=1, y1=2; float x2=3, y2=4;
long x3=5 , y3=6;
cout<< Max(x1,y1) << “t” << Max(x2,y2) << endl;
cout << Max(x3,y1) << endl; // Gọi hàm 1
cout << Max(x3,y2) << endl; // Gọi hàm 2
cout << Max(x3,y3) << endl; // Lỗi!
40. Bo mon MMT&TT 40
Là 1 hàm nhưng tác dụng tương tự như một macro.
Khắc phục được các nhược điểm của hàm và macro.
Giảm thời gian thực thi chương trình.
Tăng kích thước của mã lệnh thực thi.
Chỉ nên định nghĩa inline khi hàm có kích thước nhỏ.
Cú pháp : thêm từ khóa inline vào trước hàm.
VD: inline float sqr(float x) {
return (x*x); }
inline int Max(int a, int b) {
return ((a>b) ? a : b) ; }
Hàm inline
41. Bo mon MMT&TT 41
Khái niệm
Là 1 loại đối tượng dữ liệu “tham chiếu” đến 1 đối tượng có
sẵn.
Là 1 bí danh như con trỏ, nhưng không cần có tác tử *.
VD: int x = 10;
int *px = &x;
int &rx = x;
3 cách thay đổi giá trị của x :
x = 5;
*px = 5;
rx = 5
Tham chiếu
10
1035H
x
1035
1080H
*px
&rx
42. Bo mon MMT&TT 42
Tham chiếu dùng như một biến
Khởi tạo : int x=5; int &rx = x;
int &a; int &b=5; // SAI
Tham chiếu hằng : không thể sửa đổi giá trị.
const int &n=10;
<=> int x=3; const int &n=x;
n=5; // Báo lỗi vì n lúc này là hằng số
Gán trị lại
Không thể sửa đổi đối tượng tham chiếu.
Chỉ là thay đối giá trị.
int x = 5, y = 20; int &rx = x;
rx = y; // Chính là gán x=20
// không phải là rx tham chiếu đến y
Tham chiếu
43. Bo mon MMT&TT 43
Tham chiếu dùng như đối số của hàm
Làm thay đổi giá trị của tham số.
Hữu ích cho hàm trả về nhiều kết quả.
Tiết kiệm được ô nhớ trung gian (tham số hình thức) trong
hàm.
Tham chiếu
void Nhap (int& a, float& b) {
cout<< “Nhap tham so 1 : “; cin>>a;
cout<< “Nhap tham so 2 : “; cin>>b;
}
void main() {
int n; float m;
Nhap( n , m );
}
44. Bo mon MMT&TT 44
Tham chiếu dùng như trị trả về của hàm
Đối tượng trả về vẫn bền vững khi hàm kết thúc.
Trị trả về là 1 đối tượng toàn cục hay 1 vùng nhớ cục bộ.
VD: long a[1000];
long& GiaTri(int i) { return a[i]; }
void main() {
GiaTri(1) = 1; GiaTri(2) = 1;
for( int i= 3; i<1000; i++)
GiaTri(i) = GiaTri(i-1) + GiaTri(i-2); }
=> Ích lợi : che đi cách biểu diễn của dữ liệu.
( Chẳng hạn : ta đổi lại dùng CTDL là danh sách liên kết => chỉ viết lại
hàm GiaTri(int ) mà thôi )
Tham chiếu
45. Bo mon MMT&TT 45
Truyền theo giá trị
Giá trị tham số khi ra khỏi hàm sẽ không thay đổi.
Truyền tham số
void Swap1(int a, int b) {
int temp = a;
a = b;
b = temp;
}
void main(){
int x = 5, y = 10;
Swap1( x , y );
cout << “ x = “ << x
<< “ y = “ << y
<< endl;
}
5
10
x
y
a
b
main Swap1
STEP
01
5
10
x
y
5
10
a
b
main Swap1
STEP
02
5
10
x
y
10
5
a
b
main Swap1
STEP
03
46. Bo mon MMT&TT 46
Truyền theo địa chỉ (con trỏ)
Giá trị tham số khi ra khỏi hàm có thể thay đổi.
Truyền tham số
void Swap2(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void main(){
int x = 5, y = 10;
Swap2( &x , &y );
cout << “ x = “ << x
<< “ y = “ << y
<< endl;
}
5
10
x
y
a
b
main Swap2
STEP
01
100
200
5
10
x
y
100
200
a
b
main Swap2
STEP
02
100
200
10
5
x
y
100
200
a
b
main Swap2
STEP
03
100
200
47. Bo mon MMT&TT 47
Truyền theo tham chiếu:
Giá trị tham số khi ra khỏi hàm có thể thay đổi.
Truyền tham số
void Swap3(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
void main(){
int x = 5, y = 10;
Swap3( x , y );
cout << “ x = “ << x
<< “ y = “ << y
<< endl;
}
5 10x y
main
STEP
01
a b
Swap3
10 5x y
main
STEP
02
a b
Swap3
10 5x y
main
STEP
03
48. Bo mon MMT&TT 48
Khái niệm
Struct Là 1 dạng cấu trúc dữ liệu mà bản thân có thể chứa
nhiều loại dữ liệu có kiểu khác nhau.
Khai báo
Struct
SinhVien a;
2 bytes
2 bytes
4 bytes
8 bytes
diemtb
namsinh
*hoten
masosv[]
49. Bo mon MMT&TT 49
Biến kiểu struct :
SinhVien a, b, ds1[20], *ds2;
Truy xuất các thành phần của struct :
cout << “Nam sinh cua b la : “<<b.namsinh;
cin >> ds[19].namsinh;
gets(a.mssv);
ds2->hoten = new char[50];
Gán struct :
SinhVien c = a;
Con trỏ struct :
SinhVien *ds= new SinhVien[100];
Struct