ThưThư việnviện STL,STL,
TínhTính
đóngđóng
góigói
GV. GV. NguyễnNguyễn Minh Minh HuyHuy
TínhTính
đóngđóng
góigói
1Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
ThưThư việnviện C++.C++.
ThưThư việnviện STL.STL.
TínhTính đóngđóng góigói
2Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
ThưThư việnviện C++.C++.
ThưThư việnviện STL.STL.
TínhTính đóngđóng góigói
3Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
ThưThư việnviện C++C++
KháiKhái niệmniệm thưthư việnviện::
ThợThợ xâyxây dựngdựng dùngdùng gìgì đểđể xâyxây nhànhà??
TayTay khôngkhông
CôngCông cụcụ hỗhỗ trợtrợ
ThưThư việnviện lậplập trìnhtrình::
BộBộ
côngcông
cụcụ
hỗhỗ
trợtrợ
củacủa
lậplập
trìnhtrình
viênviên
BộBộ
côngcông
cụcụ
hỗhỗ
trợtrợ
củacủa
lậplập
trìnhtrình
viênviên
TậpTập hợphợp tri tri thứcthức củacủa ngườingười điđi trướctrước
CCácác lớplớp, , hàmhàm dựngdựng sẵnsẵn (file .lib).(file .lib).
CácCác thưthư việnviện C++ C++ phổphổ biếnbiến::
ThưThư việnviện chuẩnchuẩn C++.C++.
ThưThư việnviện boost: boost: hơnhơn 80 80 thưthư việnviện hỗhỗ trợtrợ lậplập trìnhtrình C++.C++.
ThưThư việnviện MFC: MFC: hỗhỗ trợtrợ lậplập trìnhtrình C++ C++ trêntrên Windows.Windows.
4Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
ThưThư việnviện C++C++
ThưThư việnviện chuẩnchuẩn (C++ Standard Library):(C++ Standard Library):
PhátPhát triểntriển vàvà chuẩnchuẩn hóahóa vàovào 1990s.1990s.
BộBộ côngcông cụcụ lậplập trìnhtrình nềnnền tảngtảng
TậpTập hợphợp cáccác lớplớp trongtrong namespace std.namespace std.
ĐặcĐặc điểmđiểm: file header : file header khôngkhông .h h.
CấuCấu trúctrúc::
ThưThư việnviện nhậpnhập xuấtxuất: : iostreamiostream, , fstreamfstream, , iomanipiomanip, ,
ThưThư việnviện STL.STL.
ThưThư việnviện chuẩnchuẩn C: file header C: file header ccxxx.hxxx.h
5Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
ThưThư việnviện C++.C++.
ThưThư việnviện STL.STL.
TínhTính đóngđóng góigói
6Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
ThưThư việnviện STLSTL
GiớiGiới thiệuthiệu STLSTL––SStandard tandard TTemplate emplate LLibrary:ibrary:
Alexander Alexander StepanovStepanov, 1994., 1994.
PhầnPhần chínhchính yếuyếu củacủa thưthư việnviện chuẩnchuẩn
TậpTập hợphợp class template class template dựngdựng sẵnsẵn
HỗHỗ trợtrợ cấucấu trúctrúc dữdữ liệuliệu tổngtổng quátquát
CấuCấu trúctrúc thưthư việnviện::
NhómNhóm containers.containers.
NhómNhóm iteratorsiterators
NhómNhóm algorithms.algorithms.
NhómNhóm functorsfunctors
7Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Thư viện chuẩn
Thư viện STL
iterators
algorithms functions
containers
ThưThư việnviện STLSTL
LớpLớp string (header <string>):string (header <string>):
LớpLớp đạiđại diệndiện chocho chuỗichuỗi kýký tựtự
GiảiGiải quyếtquyết 3 3 vấnvấn đềđề con con trỏtrỏ
CácCác phươngphương thứcthức chínhchính::
Phương
thức
Ý
nghĩa
8Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Phương
thức
Ý
nghĩa
string(char *) Khởi tạo từ một chuỗi char *.
length() Lấy chiều dài chuỗi.
Toán tử [ ] Lấy ký tự tại vị trí nào đó.
Toán tử >, <, >=, <=, ==, != So sánh chuỗi theo thứ tự từ điển.
Toán tử +, += Nối chuỗi.
find(char *) Tìm vị trí chuỗi con.
substr(int, int) Trích chuỗi con.
ThưThư việnviện STLSTL
LớpLớp string:string:
void main()void main()
{{
stringstring s1(“software”);s1(“software”);
stringstring s2(“s2(“SoftWareSoftWare”);”);
if (s1 == s2)if (s1 == s2)
coutcout
<< “equal.” << << “equal.” <<
endlendl
;;
coutcout
<< “equal.” << << “equal.” <<
endlendl
;;
elseelse
coutcout << “not equal.” << << “not equal.” << endlendl;;
s2 = s1.substr(4, 4);s2 = s1.substr(4, 4);
coutcout << s2;<< s2;
stringstring s3 = s1 + s2;s3 = s1 + s2;
coutcout << s3 << << s3 << endlendl;;
}}
9Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
ThưThư việnviện STLSTL
LớpLớp vector (header <vector>):vector (header <vector>):
LớpLớp mảngmảng kiểukiểu tổngtổng quátquát T.T.
GiảiGiải quyếtquyết 3 3 vấnvấn đềđề con con trỏtrỏ
CácCác phươngphương thứcthức chínhchính::
Phương
thức
Ý
nghĩa
10Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Phương
thức
Ý
nghĩa
vector<T>() Khởi tạo mảng kiểu T.
size() Lấy kích thước mảng.
resize(int) Thay đổi kích thước mảng.
Toán tử [ ] Lấy phần tử tại vị trí nào đó.
push_back(T) Thêm phần tử vào cuối mảng.
insert(position, T) Chèn phần tử vào vị trí nào đó.
ThưThư việnviện STLSTL
LớpLớp vector:vector:
void main()void main()
{{
vector<vector<intint>> v1;v1;
v1.push_back(1);v1.push_back(1);
v1.push_back(2);v1.push_back(2);
for (for (intint ii = 0; = 0; ii < v1.size(); < v1.size(); ii++)++)
coutcout << v1[<< v1[ii] << “ “;] << “ “;
vector<vector<PhanSoPhanSo *> *> v2;v2;
v2.push_back(new v2.push_back(new PhanSoPhanSo(1, 3));(1, 3));
v2[0]v2[0] >>rutGonrutGon(); ();
}}
11Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
ThưThư việnviện STLSTL
LuyệnLuyện tậptập::
ViêtViêt chươngchương trìnhtrình thựcthực hiệnhiện việcviệc sausau::
NhậpNhập vàovào danhdanh sáchsách N N chuỗichuỗi kýký tựtự
NốiNối cáccác chuỗichuỗi vừavừa nhậpnhập vàvà xuấtxuất kếtkết quảquả
CàiCài đặtđặt theotheo haihai cáchcách::
SửSử
dụngdụng
lớplớp
mảngmảng
độngđộng
thuầnthuần
túytúy
SửSử
dụngdụng
lớplớp
mảngmảng
độngđộng
thuầnthuần
túytúy
SửSử dụngdụng lớplớp string string vàvà vector vector củacủa thưthư việnviện STL.STL.
12Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
NộiNội dungdung
ThưThư việnviện C++.C++.
ThưThư việnviện STL.STL.
TínhTính đóngđóng góigói
13Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
TínhTính đóngđóng góigói
QuyQuy tắctắc hộphộp đenđen::
ThuộcThuộc tínhtính: : privateprivate đểđể hạnhạn chếchế truytruy xuấtxuất
PhươngPhương thứcthức: : publicpublic đểđể cungcung cấpcấp tínhtính năngnăng
class class HocSinhHocSinh
{{
{{
private:private:
char*char* m_hoTenm_hoTen;;
floatfloat m_diemVanm_diemVan;;
floatfloat m_diemToanm_diemToan;;
};};
14Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
Dữ liệu
(Thuộc tính)
Tính năng
(Phương thức)
TínhTính đóngđóng góigói
NhuNhu cầucầu xửxử lýlý vs. vs. quyquy tắctắc hộphộp đenđen::
CóCó nhunhu cầucầu truytruy xuấtxuất thuộcthuộc tínhtính đốiđối tượngtượng??
PhươngPhương ánán 1: 1: private private public.public.
PhươngPhương ánán 2: 2: phươngphương thứcthức truytruy xuấtxuất
VẫnVẫn vi vi phạmphạm quyquy tắctắc hộphộp đenđen!!!!
class class HocSinhHocSinh
{{
public:public:
char*char* m_hoTenm_hoTen;;
floatfloat m_diemVanm_diemVan;;
floatfloat m_diemToanm_diemToan;;
};};
15Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
class class HocSinhHocSinh
{{
private:private:
char*char* m_hoTenm_hoTen;;
floatfloat m_diemVanm_diemVan;;
floatfloat m_diemToanm_diemToan;;
public:public:
float&float& layDiemVanlayDiemVan();();
float&float& layDiemToanlayDiemToan();();
};};
TínhTính đóngđóng góigói
LàmLàm saosao vẫnvẫn tuântuân thủthủ quyquy tắctắc hộphộp đenđen??
ĐưaĐưa xửxử lýlý chocho đốiđối tượngtượng thựcthực hiệnhiện
class class HocSinhHocSinh
{{
private:private:
char*char*
m_hoTenm_hoTen
;;
char*char*
m_hoTenm_hoTen
;;
floatfloat m_diemVanm_diemVan;;
floatfloat m_diemToanm_diemToan;;
public:public:
float float tinhDTBtinhDTB();();
intint xepLoaixepLoai();();
};};
16Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
TínhTính đóngđóng góigói
Dr. Guru Dr. Guru khuyênkhuyên: : quyquy tắctắc “Tell, Don’t Ask”“Tell, Don’t Ask”
ThôngThông tin tin đốiđối tượngtượng
KhôngKhông thểthể truytruy xuấtxuất từtừ bênbên ngoàingoài
ĐốiĐối tượngtượng nắmnắm giữgiữ thôngthông tintin
ChịuChịu tráchtrách nhiệmnhiệm xửxử lýlý thôngthông tin.tin.
““ĐừngĐừng hỏihỏi tôitôi thôngthông tin tin đểđể thựcthực hiệnhiện côngcông việcviệc””
““HãyHãy nhờnhờ tôitôi làmlàm giùmgiùm!!”!!”
ĐãĐã giaogiao thôngthông tintin
GGiaoiao luônluôn xửxử lýlý thôngthông tin.tin.
17Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
TínhTính đóngđóng góigói
LuyệnLuyện tậptập::
// // TínhTính trọngtrọng tâmtâm tam tam giácgiác????
class class DiemDiem
{{
private:private:
floatfloat m_Xm_X;;
floatfloat m_Ym_Y;;
// // XuấtXuất danhdanh sáchsách họchọc sinhsinh đậuđậu ????
// (ĐTB >= 5.0)// (ĐTB >= 5.0)
class class HocSinhHocSinh
{{
private:private:
charchar **m_hoTenm_hoTen;;
};};
class class TamGiacTamGiac
{{
private:private:
DiemDiem m_Am_A;;
DiemDiem m_Bm_B;;
DiemDiem m_Cm_C;;
};};
18Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
floatfloat m_diemVanm_diemVan;;
floatfloat m_diemToanm_diemToan;;
};};
class class BangDiemBangDiem
{{
private:private:
vector<vector<HocSinhHocSinh> > m_danhSachm_danhSach;;
};};
TómTóm tắttắt
ThưThư việnviện C++:C++:
BộBộ côngcông cụcụ dựngdựng sẵnsẵn hỗhỗ trợtrợ lậplập trìnhtrình C++.C++.
CácCác thưthư việnviện phổphổ biếnbiến::
ThưThư việnviện chuẩnchuẩn::
ThưThư việnviện boost.boost.
ThưThư
việnviện
MFC.MFC.
ThưThư
việnviện
MFC.MFC.
ThưThư việnviện STL:STL:
PhầnPhần chínhchính yếuyếu củacủa thưthư việnviện chuẩnchuẩn
CácCác lớplớp dựngdựng sẵnsẵn: string, vector.: string, vector.
TínhTính đóngđóng góigói::
Tell, Don’t Ask.Tell, Don’t Ask.
19Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
BàiBài tậptập 6.1:6.1:
VớiVới mỗimỗi thưthư việnviện bênbên dướidưới, , hãyhãy liệtliệt kêkê têntên vàvà chocho biếtbiết tínhtính năngnăng củacủa ítít
nhấtnhất 3 3 lớplớp đốiđối tượngtượng trongtrong thưthư việnviện::
ThưThư việnviện chuẩnchuẩn
ThưThư việnviện boost.boost.
ThưThư
việnviện
MFC.MFC.
ThưThư
việnviện
MFC.MFC.
20Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
BàiBài tậptập 6.2:6.2:
MộtMột đoạnđoạn vănvăn baobao gồmgồm nhiềunhiều câucâu. . MỗiMỗi câucâu baobao gồmgồm nhiềunhiều từtừ vàvà kếtkết
thúcthúc bằngbằng dấudấu câucâu ((dấudấu ., ?, !). ., ?, !). XâyXây dựngdựng cáccác lớplớp cầncần thiếtthiết đểđể::
ĐọcĐọc mộtmột đoạnđoạn vănvăn từtừ file file vănvăn bảnbản
ĐếmĐếm sốsố lượnglượng câucâu vàvà sốsố lượnglượng từtừ cócó trongtrong đoạnđoạn vănvăn
TìmTìm
từtừ
xuấtxuất
hiệnhiện
nhiềunhiều
nhấtnhất
trongtrong
đoạnđoạn
vănvăn
TìmTìm
từtừ
xuấtxuất
hiệnhiện
nhiềunhiều
nhấtnhất
trongtrong
đoạnđoạn
vănvăn
SắpSắp xếpxếp tăngtăng dầndần ((thứthứ tựtự từtừ điểnđiển) ) cáccác từtừ trongtrong mỗimỗi câucâu
GhiGhi đoạnđoạn vănvăn đãđã chỉnhchỉnh sửasửa vàovào file file vănvăn bảnbản
21Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
BàiBài tậptập 6.3:6.3:
XâyXây dựngdựng lớplớp đađa thứcthức cócó nhữngnhững phươngphương thứcthức sausau::
((NhómNhóm tạotạo hủyhủy))
KhởiKhởi tạotạo mặcmặc địnhđịnh đađa thứcthức = 0.= 0.
KhởiKhởi tạotạo vớivới bậcbậc vàvà mảngmảng hệhệ sốsố chocho trướctrước
KhởiKhởi
tạotạo
từtừ
mộtmột
đốiđối
tượngtượng
đađa
thứcthức
kháckhác
KhởiKhởi
tạotạo
từtừ
mộtmột
đốiđối
tượngtượng
đađa
thứcthức
kháckhác
HủyHủy đađa thứcthức, , thuthu hồihồi bộbộ nhớnhớ
((NhómNhóm truytruy xuấtxuất thôngthông tin)tin)
LấyLấy bậcbậc đađa thứcthức
LấyLấy hệhệ sốsố tạitại bậcbậc nàonào đóđó
22Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
BàiBài tậptập 6.3:6.3:
XâyXây dựngdựng lớplớp đađa thứcthức ((tiếptiếp theotheo):):
((NhómNhóm xửxử lýlý nghiệpnghiệp vụvụ))
So So sánhsánh vớivới đađa thứcthức kháckhác
RútRút gọngọn đađa thứcthức
TínhTính
giágiá
trịtrị
, ,
đạođạo
hàmhàm
, ,
nguyênnguyên
hàmhàm
TínhTính
giágiá
trịtrị
, ,
đạođạo
hàmhàm
, ,
nguyênnguyên
hàmhàm
((NhómNhóm toántoán tửtử))
ToánToán tửtử sốsố họchọc: +, : +, , *, /, =., *, /, =.
ToánToán tửtử so so sánhsánh: >, <, ==, >=, <=, !=: >, <, ==, >=, <=, !=
ToánToán tửtử đạođạo hàmhàm (!), (!), nguyênnguyên hàmhàm (~).(~).
ToánToán tửtử nhậpnhập xuấtxuất: >>, <<.: >>, <<.
23Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy
BàiBài tậptập
BàiBài tậptập 6.4:6.4:
XâyXây dựngdựng cáccác lớplớp cầncần thiếtthiết đểđể thựcthực hiệnhiện cáccác thaothao táctác trêntrên tam tam giácgiác::
TínhTính chuchu vi vi vàvà diệndiện tíchtích
TìmTìm trọngtrọng tâmtâm ((giaogiao 3 3 đườngđường trungtrung tuyếntuyến).).
TìmTìm đườngđường trungtrung trựctrực củacủa mộtmột cạnhcạnh ((vuôngvuông gócgóc tạitại trungtrung điểmđiểm).).
TìmTìm
tâmtâm
đườngđường
tròntròn
ngoạingoại
tiếptiếp
((
giaogiao
3 3
đườngđường
trungtrung
trựctrực
).).
TìmTìm
tâmtâm
đườngđường
tròntròn
ngoạingoại
tiếptiếp
((
giaogiao
3 3
đườngđường
trungtrung
trựctrực
).).
24Phương pháp lập trình hướng đối tượng - Nguyễn Minh Huy