Bài giảng Ngôn ngữ lập trình - Bài 4: Cấu trúc và lớp - Lê Nguyễn Tuấn Thành
Tóm tắt Bài giảng Ngôn ngữ lập trình - Bài 4: Cấu trúc và lớp - Lê Nguyễn Tuấn Thành: ...ỢNG (ABSTRACT)  Thế nào là Trừu tượng : lập trình viên không biết chi tiết về kiểu dữ liệu đó  Viết tắt là ADT:  Tập hợp của những giá trị dữ liệu cùng nhau với một tập những thao tác cơ bản được định nghĩa cho các giá trị này  ADT thường độc lập ngôn ngữ (language- independent)  Cà...iến thành viên và hàm thành viên  Có thể public: truy cập được ở bên ngoài lớp  Có thể private: chỉ được phép truy cập bên trong lớp (trong định nghĩa của các hàm thành viên)  Cả lớp và cấu trúc đều có thể là tham số cho các hàm thông thường khác  Định nghĩa lớp trong C++ nên chia thành ...u khi đã khai báo đối tượng  Nhớ lại: hàm tạo được tự động gọi khi khai báo đối tượng  Lời gọi này trả lại một đối tượng vô danh (anonymous object)  Ví dụ: DayOfYear holiday(7, 4);  Khai báo đối tượng holiday sẽ gọi hàm tạo của lớp DayOfYear  Bây giờ khởi tạo lại (re-initialize) ...
NGÔN NGỮ LẬP TRÌNH
Bài 4:
Cấu trúc và lớp
Giảng viên: Lê Nguyễn Tuấn Thành
Email: thanhlnt@tlu.edu.vn
Bộ Môn Công Nghệ Phần Mềm – Khoa CNTT
Trường Đại Học Thủy Lợi
NỘI DUNG
1. Kiểu cấu trúc
2. Kiểu lớp
3. Hàm tạo & Hàm hủy
2
Bài giảng có sử dụng hình vẽ trong cuốn sách “Practical Debugging in C++, 
A. Ford and T. Teorey, Prentice Hall, 2002”
1. KIỂU CẤU TRÚC (STRUCT)
MỤC TIÊU BÀI HỌC
Các kiểu cấu trúc (structure)
Sử dụng cấu trúc như đối số của hàm
Khởi tạo cấu trúc
4
CẤU TRÚC
 Kiểu dữ liệu tổng hợp thứ hai (sau mảng): struct
 Nhớ lại: kiểu dữ liệu tổng hợp nghĩa là “nhóm dữ
liệu lại với nhau” (grouping)
 Mảng (array): tập hợp các giá trị CÙNG KiỂU
 Cấu trúc (structure): tập hợp các giá trị KHÁC KiỂU
 Được coi như một đối tượng đơn, giống như mảng
 Điểm khác nhau chính: phải ĐỊNH NGHĨA cấu 
trúc TRƯỚC khi khai báo biến.
5
ĐỊNH NGHĨA CẤU TRÚC
 Định nghĩa cấu trúc kiểu toàn cục
 Cú pháp
struct tên_cấu_trúc
{
kiểu_1 tên_biến_1;
kiểu_2 tên_biến_2;
kiểu_n tên_biến_n;
};
 Ví dụ:
struct CDAccountV1 
{
double balance;
double interestRate;
int term;
};
6
KHAI BÁO BIẾN CẤU TRÚC
 Khi kiểu cấu trúc đã được định nghĩa, có thể dùng 
để khai báo biến cho kiểu cấu trúc này 
ví dụ CDAccountV1 account;
 Giống như khai báo những kiểu cơ sở
 Biến sau khi khai báo sẽ bao gồm các giá trị thành 
viên (member values)
 Truy cập đến những thành viên của cấu trúc sử
dụng dấu .
 vd: account.balance, account.interestRate, account.term
 Các cấu trúc khác nhau có thể có tên thành viên 
trùng nhau
7
CHƯƠNG TRÌNH VỚI CẤU TRÚC (1/3)
8
CHƯƠNG TRÌNH VỚI CẤU TRÚC (2/3)
9
CHƯƠNG TRÌNH VỚI CẤU TRÚC (3/3)
10
LƯU Ý
 Khi định nghĩa cấu trúc phải kết thúc bằng dấu ;
(semicolon)
struct WeatherData
{
double temperature;
double windVelocity;
};  YÊU CẦU dấu ; 
11
GÁN CẤU TRÚC
 Giả sử khai báo 2 biến: CDAccountV1 account1, 
account2;
 Phép gán account1 = account2; là hợp lệ
 Copy giá trị của mỗi biến thành viên từ account1 sang 
account2
12
SỬ DỤNG CẤU TRÚC NHƯ ĐỐI SỐ CỦA HÀM
 Truyền biến kiểu cấu trúc vào hàm giống như các 
kiểu cơ sở khác
 Tham trị (pass-by-value)
 Tham chiếu (pass-by-reference)
 Hoặc kết hợp cả hai
 Có thể sử dụng kiểu cấu trúc như kiểu trả về của 
hàm
13
KHỞI TẠO BIỂN KIỂU CẤU TRÚC
 Có thể khởi tạo biến kiểu cấu trúc khi khai báo
struct Date
{
int month;
int day;
int year;
};
Date dueDate = {12, 31, 2003};
14
BÀI TẬP
 Viết một chương trình khai báo một cấu trúc
Sinh_Vien gồm các thông tin:
 Mã sinh viên: int
 Tên sinh viên: char[20]
 Điểm trung bình: float
Nhập giá trị cho N sinh viên (N < 10), hiển thị
thông tin từng sinh viên và cho biết sinh viên nào có
điểm trung bình lớn nhất.
15
2. KIỂU LỚP (CLASS)
MỤC TIÊU BÀI HỌC
Định nghĩa lớp
Hàm thành viên
Thành viên public và private
Hàm accessor và mutator
Cấu trúc và lớp
17
ĐỊNH NGHĨA LỚP (1/2)
 Tương tự như cấu trúc, NHƯNG 
 Lớp không chỉ có dữ liệu thành viên như cấu trúc, 
 Lớp còn bao gồm các HÀM thành viên để thao tác 
trên dữ liệu
 Khái niệm LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 
(object-oriented programming - OOP)
 Nhìn dưới góc độ đối tượng (object)
 Object: gồm DỮ LIỆU + XỬ LÝ
 Trong C++, các biến của một kiểu lớp là những đối 
tượng
18
ĐỊNH NGHĨA LỚP (2/2)
 Định nghĩa tương tự như cấu trúc
class DayOfYear  tên của kiểu lớp 
{
public:
void output();  tên hàm thành viên!
int month;
int day;
};
 Lớp là một kiểu đầy đủ (full-fledged type), giống 
như các kiểu dữ liệu cơ sở như int, double, float, 
etc.
 Tham số dùng cho một kiểu lớp có thể là:
 Tham trị (pass-by-value)
 Tham biến (pass-by-reference) 19
KHAI BÁO ĐỐI TƯỢNG
 Khai báo giống như các biến của các kiểu cơ sở
 đối tượng là một biến của kiểu lớp
 Ví dụ: DayOfYear today, birthday;
 Khai báo 2 đối tượng today, birthday của lớp 
DayOfYear
 Một đối tượng bao gồm:
 Dữ liệu. vd month, day
 Thao tác (hàm thành viên). vd output()
20
TRUY CẬP THÀNH VIÊN CỦA LỚP
 Truy cập vào các thành viên của lớp tương tự như
cấu trúc: sử dụng dấu .
 Ví dụ: today.month, today.day
 Gọi hàm thành viên: today.output()
21
HÀM THÀNH VIÊN CỦA LỚP
 Phải khai báo và cài đặt (implement) các hàm 
thành viên của lớp
 Giống như các hàm thông thường, hàm thành 
viên của lớp có thể được định nghĩa sau main()
 Phải chỉ định tên lớp đi kèm
 Ví dụ: void DayOfYear::output() {}
 Toán tử :: gọi là toán tử phân giải phạm vi (scope 
resolution operator)
22
CHƯƠNG TRÌNH VỚI LỚP (1/4)
23
CHƯƠNG TRÌNH VỚI LỚP (2/4)
24
CHƯƠNG TRÌNH VỚI LỚP (3/4)
25
CHƯƠNG TRÌNH VỚI LỚP (3/4)
26
TOÁN TỬ . VÀ ::
 Đều được sử dụng để chỉ định thành viên của một 
thực thể nào đó
 Toán tử .
 Chỉ định thành viên của một ĐỐI TƯỢNG XÁC ĐỊNH
 Toán tử ::
 Chỉ định một hàm thuộc về LỚP nào
27
ĐÓNG GÓI (ENCAPSULATION)
 Đóng gói là: Tập hợp nhiều thứ cùng nhau vào 
một thực thể đơn
 Một kiểu dữ liệu bất kỳ bao gồm:
 Dữ liệu (khoảng dữ liệu)
 Thao tác trên dữ liệu đó (operations)
 Ví dụ: kiểu dữ liệu int có
 Dữ liệu: +-32,767
 Thao tác: +,-,*,/,%,logical, 
 Tương tự với lớp NHƯNG chúng ta gộp dữ liệu và 
những thao tác trên dữ liệu đó vào trong một lớp
28
KIỂU DỮ LIỆU TRỪU TƯỢNG (ABSTRACT)
 Thế nào là Trừu tượng : lập trình viên không biết 
chi tiết về kiểu dữ liệu đó
 Viết tắt là ADT:
 Tập hợp của những giá trị dữ liệu cùng nhau với một 
tập những thao tác cơ bản được định nghĩa cho các giá 
trị này
 ADT thường độc lập ngôn ngữ (language-
independent)
 Cài đặt ADT trong C++ với khái niệm lớp (class)
29
NHỮNG NGUYÊN LÝ CỦA OOP
 Che dấu thông tin
 Người dùng không biết / không cần biết chi tiết về
cách thức hoạt động / cài đặt của các thao tác (hàm)
 Dữ liệu trừu tượng (Data Abstraction)
 Người dùng không biết chi biết dữ liệu được xử lý như
thế nào bên trong ADT/lớp
 Đóng gói (encapsulation)
 Tập hợp dữ liệu và những thao tác trên dữ liệu cùng 
nhau, nhưng che dấu chi tiết về chúng
 Mục đích?
30
THÀNH VIÊN PUBLIC VÀ PRIVATE
 Dữ liệu trong một lớp hầu như luôn được thiết kế
là private khi định nghĩa
 Tuân theo nguyên tắc của OOP
 Che dấu dữ liệu với người dùng
 Cho phép xử lý chỉ thông qua các hàm thành viên / 
thao tác
 Người dùng chỉ có thể truy cập được (user-
accessible) các hàm hoặc dữ liệu public 
 Bên ngoài định nghĩa của lớp, không thể thay đổi 
(hoặc thậm chí truy cập) được dữ liệu private
31
VÍ DỤ VỀ PUBLIC VÀ PRIVATE
 class DayOfYear 
{
public:
void input();
void output();
private:
int month;
int day;
};
 Dữ liệu là private => không thể truy cập được bởi người 
dùng
 Khai báo đối tượng: DayOfYear today;
 Đối tượng today CHỈ có thể truy cập được các thành 
viên public
 cin >> today.month; // KHÔNG CHO PHÉP!
 cout << today.day; // KHÔNG CHO PHÉP!
 Những lời gọi sau là hợp lý
 today.input();
 today.output();
32
HÀM ACCESSOR VÀ MUTATOR
 Đối tượng cần “làm một cái gì đó” với dữ liệu của 
nó
 Gọi là hàm thành viên accessor nếu:
 Cho phép đối tượng ĐỌC dữ liệu
 Cũng được gọi là hàm thành viên GET
 Đơn giản là lấy dữ liệu thành viên
 Gọi là hàm thành viên mutator nếu:
 Cho phép đối tượng THAY ĐỔI dữ liệu
33
GIAO DIỆN TÁCH RỜI VÀ CÀI ĐẶT
 Separate Interface & Implementation
 Người dùng của lớp không cần nhìn thấy chi tiết 
của việc lớp đó được cài đặt như thế nào
 Nguyên tác của OOP: đóng gói
 Người dùng chỉ cần “những quy tắc (rules)”
 Được gọi là “giao diện (interface)” cho lớp đó
 Trong C++, giao diện bao gồm những hàm thành viên 
public và những chú thích đi kèm
 Cài đặt của lớp bị che đi
 Định nghĩa hàm thành viên ở một nơi nào đó
 Người dùng không cần nhìn thấy chúng
34
SO SÁNH CẤU TRÚC VÀ LỚP
 Cấu trúc
 Không có hàm thành viên
 Tất cả dữ liệu thành viên đều là public
 Lớp
 Có hàm thành viên
 Dữ liệu thành viên thường (mặc định) là private
 Giao diện các hàm thành viên là public
35
SUY NGHĨ VỀ ĐỐI TƯỢNG
 Trọng tâm của việc lập trình thay đổi
 Giai đoạn trước: thuật toán (algorithms) là trung tâm
 Với OOP: tập trung vào dữ liệu
 Thiết kế giải pháp phần mềm: 
 Định nghĩa nhiều đối tượng và cách thức giao tiếp 
giữa chúng
36
BÀI TẬP
Viết một chương trình C++ khai báo lớp 
Sinh_Viên bao gồm:
 Biến Thành viên (Dữ liệu): 
 ID: int
 Tên_Sinh_Viên : char[50]
 Điểm_Kiểm_tra_Giữa_Kỳ: float
 Điểm_Kiểm_Tra_Cuối_Kỳ: float
 Hàm thành viên:
 input(): Nhập thông tin sinh viên
output(): In ra màn hình thông tin sinh viên
 editDiemGiuaKy(): Sửa điểm giữa kỳ của sinh viên
37
TÓM TẮT
 Cấu trúc là tập hợp những kiểu dữ liệu khác nhau
 Lớp được dùng để kết hợp dữ liệu và hàm thành 
một đơn vị đơn, gọi là đối tượng (object)
 Biến thành viên và hàm thành viên
 Có thể public: truy cập được ở bên ngoài lớp
 Có thể private: chỉ được phép truy cập bên trong lớp 
(trong định nghĩa của các hàm thành viên)
 Cả lớp và cấu trúc đều có thể là tham số cho các 
hàm thông thường khác
 Định nghĩa lớp trong C++ nên chia thành 2 phần
 Giao diện (interface): phần mà người dùng cần
 Cài đặt (implementation): chi tiết của việc lớp làm việc 
như thế nào 38
3. HÀM TẠO & HÀM HỦY
VÀ CÁC CÔNG CỤ KHÁC
MỤC TIÊU BÀI HỌC
Hàm tạo (Constructor)
 Định nghĩa hàm tạo
 Gọi hàm tạo
Hàm hủy (Destructor)
Các công cụ khác
 Hàm inline
 Thành viên tĩnh (static members)
Lớp Vector
40
HÀM TẠO (CONSTRUCTOR)
 Khởi tạo cho đối tượng của một lớp
 Khởi tạo một vài hoặc tất cả các biến thành viên
 Kèm theo một vài hoạt động khác
 Một loại đặc biệt của hàm thành viên
 Tự động được gọi khi khai báo đối tượng
 Một công cụ hữu ích: nguyên tắc quan trọng của 
OOP
 Hàm tạo được định nghĩa giống như các hàm 
thành viên khác, NGOẠI TRỪ:
 Tên hàm tạo trùng với tên lớp
 Không trả lại giá trị, thậm chí là void
 Hàm tạo được đặt ở trong phần public
41
VÍ DỤ HÀM TẠO
 class DayOfYear
{
public:
// constructor initializes month & day 
DayOfYear (int monthValue, int dayValue); 
void input();
void output();
private:
int month;
int day;
}
42
GỌI HÀM TẠO
 Khai báo đối tượng: DayOfYear date1(7, 4), date2(5, 5);
 Khi đối tượng date1, date2 được tạo
 Hàm tạo được gọi
 Các giá trị được truyền vào như đối số của hàm tạo
 Các biến thành viên month, day được khởi tạo
date1.month  7, date2.month  5
date1.day 4, date2.day  5
 CHÚ Ý: không thể gọi hàm tạo một cách tường 
minh như các hàm thành viên khác
date1.DayOfYear(7, 4); // KHÔNG HỢP LỆ!
date2.DayOfYear(5, 5); // KHÔNG HỢP LỆ!
43
CÀI ĐẶT HÀM TẠO
 Cài đặt hàm tạo giống như các hàm thành viên 
khác
DayOfYear::DayOfYear(int monthValue, int dayValue)
{
month = monthValue;
day = dayValue;
}
 Chú ý 2 tên giống nhau xung quanh toán tử ::
 Không có kiểu trả về
 Một cách cài đặt hàm tạo khác tương đương:
DayOfYear::DayOfYear(int monthValue, int dayValue) 
: month(monthValue), day(dayValue) {}
 Với phần thân hàm để trống 44
MỤC ĐÍCH KHÁC NỮA CỦA HÀM TẠO
 Hàm tạo không chỉ dùng để khởi tạo dữ liệu
 Hàm tạo có thể được dùng vào nhiều mục đích 
khác
 Kiểm tra tính hợp lệ của dữ liệu
 Thực thi các hoạt động khác liên quan
45
HÀM TẠO NẠP CHỒNG
 Hàm tạo có thể được nạp chồng giống như các hàm 
thông thường khác
 Nhớ lại: chữ ký (signature) để nhận diện một hàm 
bao gồm: 
 Có thể cung cấp hàm tạo cho tất cả trường hợp có 
thể với danh sách đối số khác nhau (nhưng cần 
thiết)
46
CHƯƠNG TRÌNH VỚI HÀM TẠO (1/3)
47
CHƯƠNG TRÌNH VỚI HÀM TẠO (2/3)
48
CHƯƠNG TRÌNH VỚI HÀM TẠO (3/3)
49
HÀM TẠO KHÔNG CÓ ĐỐI SỐ
 Hàm chuẩn (thông thường) khai báo không có đối 
số, khi gọi có dấu (). Ví dụ: callMyFunction();
 Khi đối tượng khai báo mà không có hàm tạo, 
hoặc có hàm tạo nhưng không có tham số
 DayOfYear date1; // ĐÚNG!
 DayOfYear date(); // SAI!
50
HÀM TẠO MẶC ĐỊNH (DEFAULT)
 Là: hàm tạo không có đối số
 Nên định nghĩa một hàm tạo mặc định
 Hàm tạo mặc định có được tự động sinh ra?
 Vừa đúng vừa sai
 Nếu không có bất kỳ hàm tạo nào được định nghĩa -> 
Đúng
 Nếu có ít nhất 1 hàm tạo được định nghĩa -> Sai
 Nếu không có hàm tạo mặc định:
 Không thể khai báo đối tượng
51
GỌI TƯỜNG MINH HÀM TẠO
 Bạn cũng có thể gọi lại hàm tạo sau khi đã khai 
báo đối tượng
 Nhớ lại: hàm tạo được tự động gọi khi khai báo đối 
tượng
 Lời gọi này trả lại một đối tượng vô danh (anonymous 
object)
 Ví dụ: DayOfYear holiday(7, 4);
 Khai báo đối tượng holiday sẽ gọi hàm tạo của lớp 
DayOfYear
 Bây giờ khởi tạo lại (re-initialize) 
holiday = DayOfYear(5, 5);
 Gọi hàm tạo một cách tường minh (explicit call)
 Trả về một đối tượng mới vô danh (anonymous object)
 Gán ngược lại cho đối tượng holiday
52
KIỂU BIẾN THÀNH VIÊN CỦA LỚP (1/5)
 Biến thành viên của lớp có thể là bất kỳ kiểu nào
 Bao gồm đối tượng của những lớp khác !
53
KIỂU BIẾN THÀNH VIÊN CỦA LỚP (2/5)
54
KIỂU BIẾN THÀNH VIÊN CỦA LỚP (3/5)
55
KIỂU BIẾN THÀNH VIÊN CỦA LỚP (4/5)
56
KIỂU BIẾN THÀNH VIÊN CỦA LỚP (5/5)
57
HÀM HỦY (DESTRUCTOR)
 Là một hàm thành viên của lớp có chức năng
ngược với Hàm tạo
 Được gọi trước khi giải phóng (xoá bỏ) một đối tượng
 Cú pháp: ~Tên_Lớp()
 Ví dụ:
class Da_Thuc
{
private:
int n; // bậc đa thức
double *a; // trỏ tới vùng nhớ chứa các hệ số đa thức
//int a0, a1,...
public:
~dt()
{
this->n=0;
delete this->a;
}
...
} ;
58
BÀI TẬP CHO HÀM TẠO
 Sử dụng Hàm tạo và Hàm hủy cho chương trình 
C++ khai báo lớp Sinh_Viên bao gồm:
 Dữ liệu: 
 ID, 
Tên_Sinh_Viên, 
Điểm_Kiểm_tra_Giữa_Kỳ, 
Điểm_Kiểm_Tra_Cuối_Kỳ 
 Các thao tác như:
Nhập thông tin sinh viên
 In ra màn hình thông tin sinh viên
Sửa thông tin sinh viên
59
CÁC PHƯƠNG PHÁP TRUYỀN THAM SỐ
 Hiệu quả của truyền tham số
 Tham trị (call-by-value)
 Một bản sao của tham số được tạo ra
 Tham biến (call-by-reference)
 Dùng địa chỉ / tham chiếu (reference/placeholder) của chính 
tham số đó
 Hai phương pháp này khác nhau không đáng kể với 
những kiểu đơn giản
 NHƯNG với kiểu lớp, truyền tham chiếu có lợi ích 
đáng kể, đặc biệt với dữ liệu lớn
 Để đảm bảo tham số không thay đổi, sử dụng từ
khóa const.
60
HÀM NỘI TUYẾN (INLINE FUNCTIONS)
 Trình biên dịch đặt một bản sao code của thân hàm nội 
tuyến tại mỗi vị trí mà hàm đó được gọi tại thời gian biên 
dịch (compile time).
 Thường được dùng để loại bỏ thời gian quá dụng (overhead) 
xảy ra khi gọi một hàm, cho phép tăng tốc độ thực hiện 
chương trình nhưng lại chiếm không gian bộ nhớ
nhiều hơn
 Chỉ sử dụng cho những hàm nhỏ và được dùng thường 
xuyên. Ví dụ: max(a,b)
 Với những hàm không phải hàm thành viên của lớp
 Sử dụng từ khóa inline trong khai báo hàm và trước tên 
hàm
 Với những hàm là hàm thành viên của lớp
 Đặt cài đặt (code) của hàm BÊN TRONG định nghĩa lớp -> 
tự động inline
61
THÀNH VIÊN TĨNH (STATIC MEMBERS)
 Biến thành viên tĩnh
 Mọi đối tượng của lớp đều chia sẻ duy nhất MỘT bản 
sao của biến thành viên đó
 Khi một đối tượng thay đổi giá trị của biến đó -> mọi 
đối tượng khác đều thấy sự thay đổi
 Hữu ích cho việc truy vết (tracking)
 Một hàm thành viên có được gọi thường xuyên không?
 Đối tượng tồn tại bao nhiêu lần tại một thời điểm?
 Khai báo bằng cách đặt từ khóa static trước kiểu
62
VÍ DỤ HÀM NỘI TUYẾN (INLINE)
inline double cube(double side)
{
return side * side * side
}
void main()
{
double dSideValue=4;
cout << cube(dSideValue) << endl;
}
63
HÀM TĨNH
 Hàm thành viên cũng có thể là tĩnh (static)
 Nếu không cần thiết truy cập đến dữ liệu của đối tượng
 Và vẫn phải là thành viên của lớp
 Hàm tĩnh chỉ có thể dùng dữ liệu tĩnh, gọi hàm 
tĩnh khác
 Có thể được gọi bên ngoài lớp chứa hàm đó
 Từ những đối tượng không thuộc lớp (non-class), vd. 
Server::getTurn();
 Hoặc thông qua đối tượng thuộc lớp đó, 
 Phương thức chuẩn: myObject.getTurn();
64
CHƯƠNG TRÌNH CHO THÀNH VIÊN TĨNH
(1/4)
65
CHƯƠNG TRÌNH CHO THÀNH VIÊN TĨNH
(2/4)
66
CHƯƠNG TRÌNH CHO THÀNH VIÊN TĨNH
(3/4)
67
CHƯƠNG TRÌNH CHO THÀNH VIÊN TĨNH
(4/4)
68
VECTOR
 Nhớ lại: mảng (array) có kích thước cố định
 Vector là “mảng nhưng kích thước có thể thay đổi” 
trong lúc chạy chương trình
 Có kiểu cơ sở và dùng để lưu một tập các giá trị kiểu cơ sở
 Là một kiểu lớp
 Sử dụng Thư Viện Mẫu Chuẩn (Standard Template 
Library)
 Cú pháp khai báo: vector tên_vector;
 Ví dụ: vector v;
 Tạo ra một lớp mới cho vector với kiểu int
 Truy xuất các phần tử giống như mảng, thông qua 
index
 Nhưng khi thêm phần tử: phải gọi hàm thành viên 
push_back()
 Hàm thành viên size(): trả lại số lượng phần tử hiện tại 
của vector
69
CHƯƠNG TRÌNH CHO VECTOR (1/2)
70
CHƯƠNG TRÌNH CHO VECTOR (2/2)
71
TÓM TẮT HÀM TẠO, HÀM HỦY
 Hàm tạo: tự động khởi tạo dữ liệu của lớp
 Được gọi khi đối tượng của lớp được khai báo
 Hàm tạo có cùng tên với lớp
 Hàm tạo mặc định không có tham số
 Nên luôn được định nghĩa
 Biến thành viên của lớp
 Có thể là đối tượng của một lớp khác
 Hằng số tham chiếu hiệu quả hơn tham trị
 Sử dụng inline với các hàm nhỏ để tăng hiệu suất
 Biến thành viên tĩnh: được chia sẻ bởi tất cả các đối 
tượng của lớp
 Lớp vector: là “mảng nhưng kích thước có thể thay đổi” 72
THAM KHẢO
 Giáo trình chính: W. Savitch, Absolute C++, 
Addison Wesley, 2002
 Tham khảo:
 A. Ford and T. Teorey, Practical Debugging in C++, 
Prentice Hall, 2002
 Nguyễn Thanh Thủy, Kĩ thuật lập trình C++, NXB 
Khoa học và Kĩ Thuật, 2006
73
File đính kèm:
 bai_giang_ngon_ngu_lap_trinh_bai_4_cau_truc_va_lop_le_nguyen.pdf bai_giang_ngon_ngu_lap_trinh_bai_4_cau_truc_va_lop_le_nguyen.pdf





