SlideShare a Scribd company logo
LẬP TRÌNH C++ CƠ BẢN
Các nội dung lập trình C++ cơ bản
(Đã học trong môn học NNTL C++)
 1) Input/output màn hình và bàn phím
 2) Lệnh cấu trúc điều khiển
 3) Cấu trúc dữ liệu:
 4) Xâu ký tự
 5) Xử lý dữ liệu với tệp văn bản
 Lập trình hướng đối tượng
1) Vào/ra dữ liệu với màn hình và bàn
phím
 Sử dụng các hàm thư viện chuẩn(standard)
IOSTREAM của C++
 Hàm in ra màn hình
 Hàm đọc từ bàn phím
2) Lệnh cấu trúc điều khiển
 Lệnh cấu trúc rẽ nhánh
 Cấu trúc lặp
Bài tập 1
 Cho sai số epsilon = 1E-6. Tính gần đúng các giá trị
sau
Bài tập 2
 Nhập 1 mã phản hồi của Server theo giao thức FTP
 Lập trình in ra thông báo tương ứng với mã phản
hồi
 Các mã phản hồi
 220 Command is successfully completed
 331 User name okay, need password.
 230 User logged in, proceed. Logged out if
appropriate.
 425 Can't open data connection.
 502 Syntax error, command not implemented.
3) Cấu trúc dữ liệu struct
 Định nghĩ cấu trúc dữ liệu phức hợp chứa các thành
phần dữ liệu bên trong (trường dữ liệu)
Cấu trúc mảng dữ liệu
 Chứa nhiều phần tử dữ liệu cùng kiểu
 Mảng dữ liệu tĩnh:
 Mảng dữ liệu động:
Con trỏ dữ liệu (Pointer)
 Là kiểu lưu trữ địa chỉ của dữ liệu trong bộ nhớ

 Con trỏ đến dữ liệu nào thì tương ứng với kiểu dữ
liệu đó
4) Xâu ký tự
 Biểu diễn qua mảng ký tự char []
 Có thể dùng con trỏ char* để thao tác với xâu
Xâu ký tự
 Các hàm xử lý xâu ký tự dạng char[] và char*
 strcmp, stricmp, strncmp, strincmp: so sánh xâu
 strchr, strstr: tìm kiếm kí tự, xâu con trong 1 xâu cho
trước
 strtok: tách xâu thành các từ
 strcpy: copy xâu
 strcat: ghép xâu
 atoi, atof: chuyển xâu sang dạng số
 Hàm tạo xâu theo định dạng
 sprintf
 Hàm biến đổi từ xâu sang số
 atoi : từ xâu sang số nguyên
 atof: từ xâu sang số thực
 Tham khảo cách sử dụng các hàm trong thư viện
#include <cstring>
Xâu ký tự với kiểu string (C++)
 Biểu diễn xâu bằng kiểu dữ liệu class string của
C++
 string name = “Computer”;
 Các hàm thành phần thao tác với kiểu string
 find: tìm kiếm một xâu con trong 1 xâu cho trước
 size: tính độ dài xâu
 empty: kiểm tra xâu rỗng
 substr: tách xâu con từ 1 xâu cho trước
 compare: so sánh 2 xâu
 copy: sao chép từ xâu cho trước sang 1 xâu mới
 append: ghép 2 xâu thành 1
 insert : chèn 1 xâu vào trong 1 xâu khác
 replace: thay thế 1 xâu con trong 1 xâu bằng 1 xâu
con khác
 Hàm biến đổi dữ liệu
 to_string : biến đổi từ số (nguyên hoặc thực) sang xâu
kí tự
 stoi : biến đổi từ xâu kí tự thành số nguyên int
 stof : biến đổi từ xâu kí tự thành số thực float
 Tham khảo thêm lớp string và các hàm trong thư
viện #include <string>
Các thao tác xử lý xâu kí tự hay sử
dụng trong lập trình mạng
 Tạo 1 xâu ký tự theo định dạng cho trước
 Sử dụng hàm sprintf
 Sử dụng đối tượng ostringstream
 Phân tích cú pháp xâu kí tự theo định dạng cho
trước
 Sử dụng hàm strtok
 Sử dụng istringstream
Xử lý xâu kí tự
 Tách hoặc ghép xâu
 Sử dụng hàm thành phần find()
Ví dụ
 Sau đó, nếu tìm thấy thì dùng hàm thành phần substr
if(p!=string::npos)
{
}
Bài tập 3
 Cho các câu lệnh của giao thức POP3 với cú pháp
như sau
 “USER tênrn”
 “PASS mật khẩu rn”
 “RETR số thứ tự email rn”
 “QUIT”
 Nhập tên, mật khẩu, số thứ tự email từ bàn phím
 Tạo các xâu kí tự chứa lệnh theo cú pháp ở trên
 In ra màn hình các xâu kí tự đó
Tham số
Bài tập 4
 Cho định dạng câu lệnh SMTP là:
“RCPT TO:<địa chỉ email>”
 A) Lập trình thực hiện công việc sau
 Nhập từ bàn phím 1 xâu ký tự biểu diễn câu lệnh trên
 Tách tên lệnh và địa chỉ email
◼ In ra tên lệnh nếu lệnh đúng tên
◼ In ra địa chỉ email nếu địa chỉ email đúng định dạng
<username>@huce.edu.vn
◼ In ra thông báo lỗi nếu tên lệnh sai hoặc địa chỉ email không
đúng cú pháp
 B) Lập trình
 Nhập từ bàn phím tên username
 Tạo một xâu kí tự chứa câu lệnh
“MAIL FROM:<username@huce.edu.vn>”
 In ra màn hình xâu đã tạo
Bài tập 5
 Cho một xâu kí tự chứa HTTP request như sau:
"GET / HTTP/1.1rnHost: ktht.nuce.edu.vnrnUser-
Agent: curl/7.79.1rnAccept: */*rnrn“
 Hãy lập trình để tách xâu kí tự thành các thành phần
sau
 Method, URL và version
 Tách các trường thông tin Header và giá trị tương ứng
 In ra màn hình các thành phần đó
5) Thao tác với file văn bản
 Sử dụng thư viện STDIO (chuẩn C)
 Mở tệp
 Đọc tệp
 Đọc theo dòng, lưu vào xâu char [] :
 Đọc tệp sử dụng cấu trúc lệnh vòng lặp while()
 Ghi tệp
 Ghi một xâu ký tự vào file:
Thao tác với file (chuẩn C++)
 Sử dụng thư viện FSTREAM
 Mở tệp
 Để đọc:
 Để ghi:
 Đọc tệp
 Đọc theo dòng, lưu vào xâu char [] :
◼ char buf[256];
 Đọc theo cả khối:
Ví dụ
 Ghi tệp
 Ghi 1 xâu / khối kí tự:
Ví dụ:
char header_from[] = “from: ktht@huce.edu.vnn”;
Bài tập 6
 Một chương trình Client muốn kết nối đến Server cần có các
thông số cấu hình sau: địa chỉ IP của Server, số cổng kết nối,
Username, Password và thư mục gốc
 Các thông số cấu hình trên được lưu trong file client.conf
theo định dạng mỗi thông số trên 1 dòng
 <tên thông số>=<giá trị thông số>
 Ví dụ file client.conf:
 IP=192.168.3.1
 port=110
 user=tuan
 pass=jk0012~
 root=C:box
 Yêu cầu: Hãy tạo 1 file client.conf và viết chương
trình đọc file đó để nhập vào các thông số cấu hình,
in các thông số đó ra màn hình
6) Lập trình hướng đối tượng với C++
 Cách khai báo lớp
 class ClassName
{
...
};
 Khai báo dữ liệu thành phần và hàm thành phần
 class ClassName
{
int dataMember;
int getDataMember();
…
};
Hàm tạo và hàm hủy
 Hàm tạo thực thi khi tạo đối tượng, hàm hủy thực
thi khi hủy đối tượng
 class ClassName
{
ClassName();
ClassName(int data);
~ClassName();
…
};
Triển khai hàm thành phần
 Triển khai hàm tạo và hàm hủy
ClassName::ClassName()
{
}
ClassName::ClassName(int data)
{
dataMember = data
}
ClassName::~ClassName()
{
}
 Triển khai hàm thành phần
 int ClassName::getDataMember()
{
return dataMember;
}
Thừa kế lớp
 class Base
{
…
};
 class Derive : public Base // Derive thừa kế Base
{
…
};
 Lớp con Derive sẽ kế thừa các thành phần thuộc phạm
vi public và protected của lớp cha Base
Đa hình
 Lớp con không kế thừa các hàm thành phần virtual
của lớp cha
 Lớp con có
 Khi gọi hàm thành phần virtual, tùy thuộc vào kiểu
lớp của đối tượng gọi hàm mà
Ví dụ
 class Base
{
virtual void sayHello(); // hàm virtual của Base
…
};
void Base::sayHello()
{
cout << “Hello, I am Base”;
}
Ví dụ
 class Derive : public Base
{
void sayHello(); // hàm virtual của Derive
…
};
void Derive::sayHello()
{
cout << “Hello, I am Derive”;
}
Ví dụ
 Gọi hàm virtual
Base base;
Derive derive;
Base& ref = derive;
ref.sayHello(); // hàm sayHello() của lớp Derive
Chương trình in ra : “Hello, I am Derive”
Bài 7
Một ứng dụng thi trực tuyến cần có tài khoản sinh viên
bao gồm những thông tin sau: mã sinh viên (string), họ tên,
trạng thái đăng nhập (true: đang đăng nhập, false: không
đăng nhập), địa chỉ IP của máy tính sinh viên (kiểu
unsigned long), thời gian đăng nhập (kiểu time_t), trạng
thái nộp bài( true: đã nộp bài, false: chưa nộp bài), thời
gian nộp bài(kiểu time_t).
 Hãy khai báo lớp SinhVien tương ứng với mô tả trên
với các dữ liệu thành phần tương ứng và các hàm
get/set trên từng dữ liệu thành phần
 Viết một hàm thành phần để nhập dữ liệu mã sinh viên
và họ tên cho 1 đối tượng kiểu lớp SinhVien từ tệp văn
bản. Dữ liệu của tài khoản sinh viên trong tệp như sau:
 123461<TAB>Hoang Phi Hung<CRLF>
Bài 8
 Hãy tổ chức 1 class có tên User, trong đó có thuộc tính là username
 Tạo 1 class có tên là FTPUser thừa kế lớp User. Lớp FTPUser sẽ có
thêm các thuộc tính như đường dẫn thư mục gốc root, password và
phân quyền truy nhập read, write
 Viết hàm tạo và các hàm thành phần get/set cho lớp FTPUser
 Ứng dụng FTP Server lưu thông tin tài khoản User trong 1 file có tên
ftpusers.conf
 Đọc dữ liệu của user từ file ftpusers.conf và lưu vào 1 vector có
phần tử là con trỏ User* (con trỏ được cấp phát động và thực sự
trỏ đến đối tượng lớp FTPUser)
Định dạng file User.conf
[user=tuan]
root=E:boxtuan
pass=jk0012~
read=yes
write=yes
[user=hung]
root=E:boxhung
pass=hs1342*
read=yes
write=no
[user=mai]
root=E:boxmai
pass=ws1001$
read=no
write=yes
ĐỌC THÊM
Nhận dạng xâu kí tự theo biểu thức
chính quy Regular Expression
 Biểu thức chính quy RegEx
 Là một dãy kí tự mô tả khuôn mẫu (quy tắc) để tạo ra
các xâu kí tự có định dạng nhất định
 Biểu thức chính quy được sử dụng để tìm kiếm hoặc đối
chiếu một xâu kí tự có phù hợp với một khuôn mẫu cho
trước hay không
 Biểu diễn biểu thức chính quy
 Sử dụng cú pháp và các kí tự đặc biệt gọi là
metacharacter để biểu diễn RegEx (tham khảo tài liệu)
 Sử dụng thư viện #include <regex> trong C++ để
tìm kiếm và tách xâu theo biểu thức chính quy (tham
khảo https://www.cplusplus.com/reference/regex/
Thao tác với bộ nhớ đệm
 Bộ nhớ đệm và tác dụng
 Khai báo bộ nhớ đệm
 Khai báo tĩnh sử dụng mảng char
char buffer[512];
 Khai báo động sử dụng con trỏ (cần giải phóng)
char* buffer = new char[512];
delete [] buffer;
Tiếp
 Duyệt bộ nhớ đệm sử dụng con trỏ
char buffer[512];
char* p = buffer; // con trỏ ở vị trí byte đầu tiên
p = p + i; // con trỏ ở vị trí byte i+1
// chú ý p không được vượt ra ngoài độ lớn buffer

More Related Content

Similar to 6 - Lập trình C++ cơ bản_print.pdf

179887496 sdc1-bai tap-javacanban-5
179887496 sdc1-bai tap-javacanban-5179887496 sdc1-bai tap-javacanban-5
179887496 sdc1-bai tap-javacanban-5le dai
 
Mvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất Nghệ
Mvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất NghệMvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất Nghệ
Mvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất NghệMasterCode.vn
 
Introduction Vs2008 Dot Net35
Introduction Vs2008 Dot Net35Introduction Vs2008 Dot Net35
Introduction Vs2008 Dot Net35
TechMaster Vietnam
 
Thdc3 Lap Trinh C
Thdc3 Lap Trinh CThdc3 Lap Trinh C
Thdc3 Lap Trinh C
quyloc
 
Phan 2 chuong 9 (cau truc)
Phan 2   chuong 9 (cau truc)Phan 2   chuong 9 (cau truc)
Phan 2 chuong 9 (cau truc)Trần Văn Nam
 
C9 templates
C9 templatesC9 templates
C9 templates
Tiến Quang Phan
 
Net06 asp.net applications & state management
Net06 asp.net applications & state managementNet06 asp.net applications & state management
Net06 asp.net applications & state management
hoangnguyentien
 
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPTBài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
MasterCode.vn
 
Ctdl C01
Ctdl C01Ctdl C01
Ctdl C01giang
 
Kiem tra Javasrctip
Kiem tra JavasrctipKiem tra Javasrctip
Kiem tra Javasrctip
nguyenkiet2k14
 
LAP TRINH C - SESSION 2
LAP TRINH C - SESSION 2LAP TRINH C - SESSION 2
LAP TRINH C - SESSION 2
pnanhvn
 

Similar to 6 - Lập trình C++ cơ bản_print.pdf (20)

Ctdl lab01
Ctdl lab01Ctdl lab01
Ctdl lab01
 
P2
P2P2
P2
 
179887496 sdc1-bai tap-javacanban-5
179887496 sdc1-bai tap-javacanban-5179887496 sdc1-bai tap-javacanban-5
179887496 sdc1-bai tap-javacanban-5
 
Mvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất Nghệ
Mvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất NghệMvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất Nghệ
Mvc4 seminar - hoclaptrinhweb.com - Tài liệu Nhất Nghệ
 
On thitotnghiep
On thitotnghiepOn thitotnghiep
On thitotnghiep
 
Introduction Vs2008 Dot Net35
Introduction Vs2008 Dot Net35Introduction Vs2008 Dot Net35
Introduction Vs2008 Dot Net35
 
Thdc3 Lap Trinh C
Thdc3 Lap Trinh CThdc3 Lap Trinh C
Thdc3 Lap Trinh C
 
Phan 2 chuong 9 (cau truc)
Phan 2   chuong 9 (cau truc)Phan 2   chuong 9 (cau truc)
Phan 2 chuong 9 (cau truc)
 
C9 templates
C9 templatesC9 templates
C9 templates
 
C9 templates
C9 templatesC9 templates
C9 templates
 
Net06 asp.net applications & state management
Net06 asp.net applications & state managementNet06 asp.net applications & state management
Net06 asp.net applications & state management
 
Bai tap thuc hanh
Bai tap thuc hanhBai tap thuc hanh
Bai tap thuc hanh
 
Java Tieng Viet
Java Tieng VietJava Tieng Viet
Java Tieng Viet
 
Kiem tra javascript
Kiem tra javascriptKiem tra javascript
Kiem tra javascript
 
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPTBài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
Bài 5 Lập trình PHP (phần 3) Làm việc với dữ liệu của form - Giáo trình FPT
 
Ctdl C01
Ctdl C01Ctdl C01
Ctdl C01
 
Kiem tra Javasrctip
Kiem tra JavasrctipKiem tra Javasrctip
Kiem tra Javasrctip
 
LAP TRINH C - SESSION 2
LAP TRINH C - SESSION 2LAP TRINH C - SESSION 2
LAP TRINH C - SESSION 2
 
Bai tap php_m123
Bai tap php_m123Bai tap php_m123
Bai tap php_m123
 
File trong c_
File trong c_File trong c_
File trong c_
 

6 - Lập trình C++ cơ bản_print.pdf

  • 1. LẬP TRÌNH C++ CƠ BẢN Các nội dung lập trình C++ cơ bản (Đã học trong môn học NNTL C++)  1) Input/output màn hình và bàn phím  2) Lệnh cấu trúc điều khiển  3) Cấu trúc dữ liệu:  4) Xâu ký tự  5) Xử lý dữ liệu với tệp văn bản  Lập trình hướng đối tượng 1) Vào/ra dữ liệu với màn hình và bàn phím  Sử dụng các hàm thư viện chuẩn(standard) IOSTREAM của C++  Hàm in ra màn hình  Hàm đọc từ bàn phím 2) Lệnh cấu trúc điều khiển  Lệnh cấu trúc rẽ nhánh  Cấu trúc lặp
  • 2. Bài tập 1  Cho sai số epsilon = 1E-6. Tính gần đúng các giá trị sau Bài tập 2  Nhập 1 mã phản hồi của Server theo giao thức FTP  Lập trình in ra thông báo tương ứng với mã phản hồi  Các mã phản hồi  220 Command is successfully completed  331 User name okay, need password.  230 User logged in, proceed. Logged out if appropriate.  425 Can't open data connection.  502 Syntax error, command not implemented. 3) Cấu trúc dữ liệu struct  Định nghĩ cấu trúc dữ liệu phức hợp chứa các thành phần dữ liệu bên trong (trường dữ liệu) Cấu trúc mảng dữ liệu  Chứa nhiều phần tử dữ liệu cùng kiểu  Mảng dữ liệu tĩnh:  Mảng dữ liệu động:
  • 3. Con trỏ dữ liệu (Pointer)  Là kiểu lưu trữ địa chỉ của dữ liệu trong bộ nhớ   Con trỏ đến dữ liệu nào thì tương ứng với kiểu dữ liệu đó 4) Xâu ký tự  Biểu diễn qua mảng ký tự char []  Có thể dùng con trỏ char* để thao tác với xâu Xâu ký tự  Các hàm xử lý xâu ký tự dạng char[] và char*  strcmp, stricmp, strncmp, strincmp: so sánh xâu  strchr, strstr: tìm kiếm kí tự, xâu con trong 1 xâu cho trước  strtok: tách xâu thành các từ  strcpy: copy xâu  strcat: ghép xâu  atoi, atof: chuyển xâu sang dạng số  Hàm tạo xâu theo định dạng  sprintf  Hàm biến đổi từ xâu sang số  atoi : từ xâu sang số nguyên  atof: từ xâu sang số thực  Tham khảo cách sử dụng các hàm trong thư viện #include <cstring>
  • 4. Xâu ký tự với kiểu string (C++)  Biểu diễn xâu bằng kiểu dữ liệu class string của C++  string name = “Computer”;  Các hàm thành phần thao tác với kiểu string  find: tìm kiếm một xâu con trong 1 xâu cho trước  size: tính độ dài xâu  empty: kiểm tra xâu rỗng  substr: tách xâu con từ 1 xâu cho trước  compare: so sánh 2 xâu  copy: sao chép từ xâu cho trước sang 1 xâu mới  append: ghép 2 xâu thành 1  insert : chèn 1 xâu vào trong 1 xâu khác  replace: thay thế 1 xâu con trong 1 xâu bằng 1 xâu con khác  Hàm biến đổi dữ liệu  to_string : biến đổi từ số (nguyên hoặc thực) sang xâu kí tự  stoi : biến đổi từ xâu kí tự thành số nguyên int  stof : biến đổi từ xâu kí tự thành số thực float  Tham khảo thêm lớp string và các hàm trong thư viện #include <string> Các thao tác xử lý xâu kí tự hay sử dụng trong lập trình mạng  Tạo 1 xâu ký tự theo định dạng cho trước  Sử dụng hàm sprintf  Sử dụng đối tượng ostringstream  Phân tích cú pháp xâu kí tự theo định dạng cho trước  Sử dụng hàm strtok  Sử dụng istringstream Xử lý xâu kí tự  Tách hoặc ghép xâu  Sử dụng hàm thành phần find() Ví dụ  Sau đó, nếu tìm thấy thì dùng hàm thành phần substr if(p!=string::npos) { }
  • 5. Bài tập 3  Cho các câu lệnh của giao thức POP3 với cú pháp như sau  “USER tênrn”  “PASS mật khẩu rn”  “RETR số thứ tự email rn”  “QUIT”  Nhập tên, mật khẩu, số thứ tự email từ bàn phím  Tạo các xâu kí tự chứa lệnh theo cú pháp ở trên  In ra màn hình các xâu kí tự đó Tham số Bài tập 4  Cho định dạng câu lệnh SMTP là: “RCPT TO:<địa chỉ email>”  A) Lập trình thực hiện công việc sau  Nhập từ bàn phím 1 xâu ký tự biểu diễn câu lệnh trên  Tách tên lệnh và địa chỉ email ◼ In ra tên lệnh nếu lệnh đúng tên ◼ In ra địa chỉ email nếu địa chỉ email đúng định dạng <username>@huce.edu.vn ◼ In ra thông báo lỗi nếu tên lệnh sai hoặc địa chỉ email không đúng cú pháp  B) Lập trình  Nhập từ bàn phím tên username  Tạo một xâu kí tự chứa câu lệnh “MAIL FROM:<username@huce.edu.vn>”  In ra màn hình xâu đã tạo Bài tập 5  Cho một xâu kí tự chứa HTTP request như sau: "GET / HTTP/1.1rnHost: ktht.nuce.edu.vnrnUser- Agent: curl/7.79.1rnAccept: */*rnrn“  Hãy lập trình để tách xâu kí tự thành các thành phần sau  Method, URL và version  Tách các trường thông tin Header và giá trị tương ứng  In ra màn hình các thành phần đó
  • 6. 5) Thao tác với file văn bản  Sử dụng thư viện STDIO (chuẩn C)  Mở tệp  Đọc tệp  Đọc theo dòng, lưu vào xâu char [] :  Đọc tệp sử dụng cấu trúc lệnh vòng lặp while()  Ghi tệp  Ghi một xâu ký tự vào file: Thao tác với file (chuẩn C++)  Sử dụng thư viện FSTREAM  Mở tệp  Để đọc:  Để ghi:  Đọc tệp  Đọc theo dòng, lưu vào xâu char [] : ◼ char buf[256];  Đọc theo cả khối: Ví dụ  Ghi tệp  Ghi 1 xâu / khối kí tự: Ví dụ: char header_from[] = “from: ktht@huce.edu.vnn”;
  • 7. Bài tập 6  Một chương trình Client muốn kết nối đến Server cần có các thông số cấu hình sau: địa chỉ IP của Server, số cổng kết nối, Username, Password và thư mục gốc  Các thông số cấu hình trên được lưu trong file client.conf theo định dạng mỗi thông số trên 1 dòng  <tên thông số>=<giá trị thông số>  Ví dụ file client.conf:  IP=192.168.3.1  port=110  user=tuan  pass=jk0012~  root=C:box  Yêu cầu: Hãy tạo 1 file client.conf và viết chương trình đọc file đó để nhập vào các thông số cấu hình, in các thông số đó ra màn hình 6) Lập trình hướng đối tượng với C++  Cách khai báo lớp  class ClassName { ... };  Khai báo dữ liệu thành phần và hàm thành phần  class ClassName { int dataMember; int getDataMember(); … }; Hàm tạo và hàm hủy  Hàm tạo thực thi khi tạo đối tượng, hàm hủy thực thi khi hủy đối tượng  class ClassName { ClassName(); ClassName(int data); ~ClassName(); … };
  • 8. Triển khai hàm thành phần  Triển khai hàm tạo và hàm hủy ClassName::ClassName() { } ClassName::ClassName(int data) { dataMember = data } ClassName::~ClassName() { }  Triển khai hàm thành phần  int ClassName::getDataMember() { return dataMember; } Thừa kế lớp  class Base { … };  class Derive : public Base // Derive thừa kế Base { … };  Lớp con Derive sẽ kế thừa các thành phần thuộc phạm vi public và protected của lớp cha Base Đa hình  Lớp con không kế thừa các hàm thành phần virtual của lớp cha  Lớp con có  Khi gọi hàm thành phần virtual, tùy thuộc vào kiểu lớp của đối tượng gọi hàm mà
  • 9. Ví dụ  class Base { virtual void sayHello(); // hàm virtual của Base … }; void Base::sayHello() { cout << “Hello, I am Base”; } Ví dụ  class Derive : public Base { void sayHello(); // hàm virtual của Derive … }; void Derive::sayHello() { cout << “Hello, I am Derive”; } Ví dụ  Gọi hàm virtual Base base; Derive derive; Base& ref = derive; ref.sayHello(); // hàm sayHello() của lớp Derive Chương trình in ra : “Hello, I am Derive” Bài 7 Một ứng dụng thi trực tuyến cần có tài khoản sinh viên bao gồm những thông tin sau: mã sinh viên (string), họ tên, trạng thái đăng nhập (true: đang đăng nhập, false: không đăng nhập), địa chỉ IP của máy tính sinh viên (kiểu unsigned long), thời gian đăng nhập (kiểu time_t), trạng thái nộp bài( true: đã nộp bài, false: chưa nộp bài), thời gian nộp bài(kiểu time_t).  Hãy khai báo lớp SinhVien tương ứng với mô tả trên với các dữ liệu thành phần tương ứng và các hàm get/set trên từng dữ liệu thành phần  Viết một hàm thành phần để nhập dữ liệu mã sinh viên và họ tên cho 1 đối tượng kiểu lớp SinhVien từ tệp văn bản. Dữ liệu của tài khoản sinh viên trong tệp như sau:  123461<TAB>Hoang Phi Hung<CRLF>
  • 10. Bài 8  Hãy tổ chức 1 class có tên User, trong đó có thuộc tính là username  Tạo 1 class có tên là FTPUser thừa kế lớp User. Lớp FTPUser sẽ có thêm các thuộc tính như đường dẫn thư mục gốc root, password và phân quyền truy nhập read, write  Viết hàm tạo và các hàm thành phần get/set cho lớp FTPUser  Ứng dụng FTP Server lưu thông tin tài khoản User trong 1 file có tên ftpusers.conf  Đọc dữ liệu của user từ file ftpusers.conf và lưu vào 1 vector có phần tử là con trỏ User* (con trỏ được cấp phát động và thực sự trỏ đến đối tượng lớp FTPUser) Định dạng file User.conf [user=tuan] root=E:boxtuan pass=jk0012~ read=yes write=yes [user=hung] root=E:boxhung pass=hs1342* read=yes write=no [user=mai] root=E:boxmai pass=ws1001$ read=no write=yes ĐỌC THÊM Nhận dạng xâu kí tự theo biểu thức chính quy Regular Expression  Biểu thức chính quy RegEx  Là một dãy kí tự mô tả khuôn mẫu (quy tắc) để tạo ra các xâu kí tự có định dạng nhất định  Biểu thức chính quy được sử dụng để tìm kiếm hoặc đối chiếu một xâu kí tự có phù hợp với một khuôn mẫu cho trước hay không  Biểu diễn biểu thức chính quy  Sử dụng cú pháp và các kí tự đặc biệt gọi là metacharacter để biểu diễn RegEx (tham khảo tài liệu)
  • 11.  Sử dụng thư viện #include <regex> trong C++ để tìm kiếm và tách xâu theo biểu thức chính quy (tham khảo https://www.cplusplus.com/reference/regex/ Thao tác với bộ nhớ đệm  Bộ nhớ đệm và tác dụng  Khai báo bộ nhớ đệm  Khai báo tĩnh sử dụng mảng char char buffer[512];  Khai báo động sử dụng con trỏ (cần giải phóng) char* buffer = new char[512]; delete [] buffer; Tiếp  Duyệt bộ nhớ đệm sử dụng con trỏ char buffer[512]; char* p = buffer; // con trỏ ở vị trí byte đầu tiên p = p + i; // con trỏ ở vị trí byte i+1 // chú ý p không được vượt ra ngoài độ lớn buffer