Lập trình hướng đối tượng
- phương pháp lập trình ly đối ợngm nền tảng để xây dựng giải thuật, chương
trình
- pplt dựa trên kiến trúc lớp(class) đối tượng(object)
- Class chứa nhiều object đặc điểm giống nhau
1. Đối tượng (object)
- Được hiểu như 1 thc thể: người, vật hoặc 1 bảng dữ liệu,…
- Mỗi đối tượng sẽ tồn tại trong 1 hệ thống ý nghĩa nhất định trong hệ thống
- Đối ợng giúp biểu diễn tốt hơn trên máy tính
- Gồm 2 thành phần: Thuộc tính thao tác.
2. Lớp(class)
- Các đối tượng đặc tính ơng tự nhau được gom chung thành 1 lớp đối tượng. Một lớp
đối tượng đặc trưng bằng c thuộc tính và c hành động.
+ Thuộc tính(Attribute): 1 thành phần của đối tượng, giá trị nhất định cho mỗi đối
tượng tại mỗi thời điểm trong hthống.
+ Thao tác(Operation): Thể hiện hành vi của 1 đối tượngc động qua li vớic đối
tượng khác hoc chính nó
Túm lại, lớp 1 tả trừu tượng của c đối tượng cùng bn chất, ngược lại mỗi 1
đối tượng lại là 1 thể hiện cụ thể cho những mô tả trừu tượng đó.
- Mỗi thao tác trên 1 lớp đối tượng cụ th ng với 1 tình huống cụ thể khác nhau. 1 cài đặt
như vậy gọi là 1 phương thức(method)
- Cùng 1 phương thức th áp dụng được nhiều lp đối ng khác nhau Đa hình
( polymorphism)
- Một đối tưng cụ th thuộc 1 lớp gọi 1 thể hiện(instance) của lớp đó.
*Đặc trưng của OPP:
- Đóng gói (Encapsulation)
- Thừa kế (inheritance)
- Đa hình (Polymorphism)
a. Đóng gói Che dấu thông tin
- Đóng gói: nhóm những liên quan đến nhau vào m 1, để sau này thể ng 1 cái
tên để gọi đến những thứ được đóng gói.
- Các hàm/thủ tục đóng gói các câu lệnh
- Các đối tượng đóng gói dữ liệu của chúng các thủ tục liên quan
- Che dấu thông tin: Che dấu 1 số thông tin chi tiết cài đặt nội bộ để bên ngoài k nhìn
thấy hoặc không cn hoặc bí mật.
b. Thừa kế
- chế cho phép 1 lớp D nào đó đượcc thuộcnh thao tác của lớp C, như thể
các thuộc tính và thao tác đó đã được định nghĩa tại lớp D
- Cho phép cài đặt nhiều quan hệ giữa các đối tượng:
Đặc biệta
Khái qt a
c. Đa hình
- 1 chế cho phép 1 tên thao tác hoặc thuộc tính th được đnh nghĩa tịa nhiều lớp
và có thể có nhiều cài đặt khác nhau tại mỗi lớp trong các lớp đó.
Ưu điểm lập OPP:
- Nguyên kế thừa: Tránh lặp lại, tái sử dng
- Nguyên đóng gói Che du thông tin: Chương trình an toàn không bị thay đổi bởi
nhng đoạn chương trình khác
- Dễ mở rộng, nâng cấp
- phỏng thế giới thực tốt hơn
- Dữ liệu được đóng gói lại, được che dấu không cho phép các hàm ngoại lai truy nhập
tự do.
- Các đối tượngc động trao đổi thông tin với nhau qua các hàm
- th dễ dàng bổ sung dữ liệu và các hàm mới vòa đối tượng nào đó khi cần thiết
Một số liên quan OPP:
- OOM (object oriented methodology): Phương pháp luận ng đối tượng
- OOA (object oriented analysis): Phân tích hướng đối tượng
- OOD (object oriented design): Thiết kế hướng đối tượng
- OOP (object oriented programming): Lập trình hướng đối tượng
3. Khai báo lớp C++
Classs <tên_lớp>
{
//khai báo các thành phần dữ liệu
//Khai báo các hàm pơng th
Private: <khai o các thành phần riêng trong tng đối tượng>
Protected: <Khai báo thành phn riêng trong từng đối ợng, th truy nhập tứ lớp dn xuất
Public: <Khai báo phn công cộng>
};
- Public: thể truy xuất trong bất m nào
- Private: Chỉ được truy xuất trong phạm vi lớp. Chỉ các phương thức của lớp mới có
quyền truy cp đến các thành phần private. Các thành phần public được phép sử dụng cả
trong và ngoài lớp
- Trong lớp th nhiu public private. Mỗi nhãn này sẽ phạm vi ảnh hưởng cho
đến khi gặp 1 nhãn kế tiếp hoặc hết khai báo lớp.
4. Định nghĩa hàm thành phần của lớp
- 1 hàm thành phần của lớp chỉ cẩn khai o tên m trong phn khai báo lớp. Nội dung
của hàm sẽ khai báo saubên ngoài khaio lớp:
<Tên kiểu giá trị trả về> <Tên lớp>::<Tênm> (<danh ch tham số>)
{
<Nội dung>
}
5. Khai báo tạo lập đối tương
- Khai báo tạo lập đối ợng: <tên lớp> <tên đối tượng>;
- Gọi hàm tnh phần của lớp
<tên đối ợng>.<tênm thành phần >(<danh sách tham số>);
<Tên con trỏ đối tượng> -> <Tên hàm thành phần>(<Danh sách tham số>);
VD:
- Xây dựng lớp mảng số thực, trong lớp 2 phương thức nhập nh tổng giá trị c
phn tử của mng.
- Ưng dụng: Cho biết thu nhập ca k cán bộ, hãy viết chương trình tính ra tng thu nhập
Btap:
- Xây dựng lớp Arr2 phương thức: NhapSL, Nhapmangso, Nhapmangchu, swap, swapc,
sort,Xuatdulieu
- Áp dụng để giải bài tập: Biếtn, đim ca n sinh viên. Hãy viết chương trình để nhập d
liệu và in lại danh sách họ tên và đim của sinh viên theo thứ tự giảm dần của điểm.
Btap2:
- Sử dụng phương pháp lập trình hưng đối tượng để viết ctrinh nhập vào: hoten, gioitinh
và diem của n sinh viên. Tính toán và in ra 3 sinh viên nam điểm cao nhất
6. Hàm tạo (Constructor)
- 1 phương thức đặc biệt được gọi tự động tại thời điểm đối ợng được tạo
- Mục đích: Khởi tạoc thành phần dữ liệu của đối tượng (khai báo thực hiện công
việc “thu xếp, dọn chỗ” cho đối tượng mới).
- Hàm tạo phải cùng tên với tên lớp và không bất cứ kiểu trả về kể cả kiểu void.
- hàm tọa tham số hàm tạo không tham số.
- Hàm tạo tham số nhận giá trị mặc định cho phép khi chúng ta khai báo đối tượng thì
thể hoặc không cung cấp giá trị cho tham số tương ứng.m tạo đối mặc đnh
toàn phần là m tạo mà mọi đối số đều có giá trị mặc định.
VD:
Class nhanvien{
Int ms, namsinh;
String ten,trinhdo,ngoaingu;
Public;
Nhanvien();
Nhanvien(int m,int ns){
Ms =m;
Namsinh=ns;
}
Nhanvien(int m,string td){
Ms=m;
Trinhdo = t;
}
Nhanvien(int m,string td,string nn){
Ms = m;
Trinhdo = td;
Ngoaingu = nn;
}
*Giải thích:
- Hàm tạo nhanvien() gọi hàm tạo mặc nhiên sẽ tự động được gọi thực hiện mỗi khi đối
tượng được khởi tạo.
- Hàm tạo tham số để cung cấpc bộ giá trị khác nhau cho các đối ng riêng biệt.
Vdu:
Nhanvien vn;
Nhanvien nvVanphong(1,1999);
Nhanvien nvKythuat(2,”Daihoc”);
Nhanvien nvDoingoai(3,”Caodang”,”Tienganh”);
7. Hàm hủy (Destructor)
- các hàm thành viên được tự động thực thi khi chương trình hy 1 đối tưng (instance)
được tạo ra từ class, và được sử dụng với mục đích xóa giải phóng đối tượng đó khỏi
bộ nhớ.
- Nvu chính: giải phóng vùng bộ nhớ đã được sử dng để lưu đối tượng sau khi bị hủy
- 3 tính chất:
+ Phải kèm ~ đằng trước (~classname)
+ Không mang kiểu dữ liệu trong nó, k sử dụng void khi khai báo
+ Không tham số, không giá trị trả về từ
- Hàm hủy được chạy tự động đối với nhng đối ng thông thường hoc đối tượng được
cấp phát động.
- Delete [] đối tượng;
*Kết luận:
- Chỉ duy nhất 1 hàm hủy trong 1 lớp.m hủy tự động được gọi. Nếu k định nghĩa m
hủy thì mặc định trình biên dịch sẽ t tạo ra 1 hàm hy mặc nhiên.
- Hàm hủy được định nghĩa cùng tên với lp, không bất cứ kiểu trả về kể cả void,
tuy nhiên phải có ~ trước tên m hủy.
Btap áp dng:
- Tạo lớp(class): TS quản thí sinh thi đại học gồm các thành phần
+ Dữ liệu: SBD,hoten,diem toan,ly,hoa, khuvucduthi )(=1/2/3)
+ Phương thức:
Voidnhap(): để nhập dữ liệu về thí sinh
Void in(): để tin thông tin về thí sinh gồm cả kết quả xét tuyển (điểm chuẩn:25)
+ Các hàm tạo (constructor)
TS() hàm tạo không đối trong đó sẽn giá trị đầu các thuộc tính của thí sinh
TS(…) m tạo các tham số: SBD,hoten,diem toan,ly,hoa khuvucduthi,
mặc định kv=2
- Viếtm main để nhập in thông tin của 2 thí sinh theo các tình huống hàm tạo không
đối và đối.
8. Hàm tạo sao chép
- Được gọi khi khai báo khởi tạo nội dung 1 đối tướng mới thống qua 1 đối tượng khác
- Nhiệm vụ chính: Tạo ra 1 đối ợng mới giống hệt 1 đối tượng đang .
+ Complex c1(10,2);
+ Complex c2=c1;
+ Complex c2(c1);// Cách viết cùng ý nghĩa với câu lệnh trên
- Điểm khác với phép gán: Phép gán thực hiện sao chép nội dung từ đối tượng này sang
đối tượng khác -> cả 2 đối tượng c1 c2 đã tồn tại.m tạo sao chép tạo đối ợng mới
và sao chép nội dung từ đối tượng đã có -> c2 chưa tn tại.
9. Con trỏ this
- 1 con trỏ đặc biệt dùng để trỏ đến địa chỉ của đối tượng hiện tại.
10. Hàm trực tuyến (inline)
- 1 chức năng trong C++. m được định nghĩa với từ ka inline. Được sử dụng đ
u cầu trình biên dịch thay thế lời gọim bằng code của hàm nhằm mục đích giảm
thời gian chạy chương trình.
Inline <kiểu dữ liệu> tên-hàm (<dsach đối>)
{
//các câu lệnh trong thân hàm
[return <hng biểu thức>;]
}
Chú ý: m inline phải được định nghĩa tc khi sử dụng tnh biên dịch. hàm
inline được biên dịch trước trước khi nó được chèn vào chương trình.
11. Nạp chồng hàm (Function overloading)
- Cho phép sử dụng cùng 1n hàm gọi cho nhiềum (có cùng mục đích) nhưng khác
nhau về kiểu d liệu tham số hoặc số lưng tham số.
Phân giải nạp chồng:
- Khi gọi 1 hàm nạp chồng hoặc 1 toán tử nạp chồng thì trình biên dịch sẽ qđịnh định
nghĩa thích hợp nhất để sử dụng bằng việc so sánh các kiểu tham số.
Nạp chồng toán tử:
- 1 tình năng cho phép bạn định nghĩa lại ý nghĩa của c toán tử cho c lớp của riêng
bạn. Khi toán tử được định nghĩa lại, bạn thể sử dụngc toán tử y để thực hiện các
hoạt động trên các đối tượng của lớp của bạn.
- Trừ 4 toán tử k thể nạp chồng: . .* :: ?:
- Hàm nạp chồng toán tử thể hàm tnh phần hoặc m bn của lớp nhưng không th
là hàm tĩnh
12. Hàm bạn
- 1 hàm bên ngoài của 1 lớp nhưng được phép truy cpo các tnh viên bảo mật
(private) và các thành viên được bảo vệ (protected) ca lớp đó.
- Thường được sử dụng khi ta muốn thực hiện 1 hoạt động trên các đối tượng của lớp đó
mà không phải tạo thêm các hàm thành viên của lớp.
- 1 hàm tự do, không thuộc lp. Có th nhiều hàm bạn, phải nằm bên ngoài class.
- Đặt từ khóa friend” phía trước, sau đó khai o như 1 hàm thông thường.
13. Hàm tĩnh (Static Function)
- 1 hàm được khai báo trong 1 lớp, không thuộc về 1 đối ng cụ thể của lớp đó
chỉ phụ thuộc vào lớp đó.
- Không phụ thuộc vào đối ng thể được gọi kng cần tạo 1 đối tượng nào.
- Sử dụng “Static” để khai báo m. c m tĩnh thường được sử dụng để thực hiện các
tính toán liên quan đến lớp mà không cần tạo đối tương của lớp đó.
Btap AD: Hãy viết chương trình:
- Bao gồm định nghĩa lớp sinhvien(msv,hoten) lớp monhoc(tenmon,stc) cho phép khai
báo số ợng n sinhvien. Thực hiện nhập số liệu về thông tin sinh viên điểm mỗi môn
học mà sinh viên đã thi. Tính điểm tbc học cho mỗi sinh viên và in danh sách
hoten,diemtbc cua sinhvien theo thứ tự giảm dần của điểm tbc.
- Yêu cầu: Sử dụng Hàm inline, hàm bạn,m tĩnh, nạp chồng hàm.
14. Dẫn xuất kế tha
Tính đa hình: (Polymorphism)
- Trong công ty nhiều người lao động:ng nhân, quản lý, lãnh đạo. Mỗi loại đối tượng
đều đc quản bởi những thông tin tổng quát như số, họ tên, ngày sinh sđt nhưng
mỗi đối ng sẽ có 1 bộ thuộc tính riêng và ng thức tính lương riêng:
+ Công nhân: Có bậc thợ nh ơng thông qua bc thợ ngày công
+ Quản lý: trình độ đào to, tm niên hệ số lương. Tính ơng dựao thâm niên
và hệ số lương.
+ Quản lý: Có tỷ lệ góp vốn tính lương dựa vào lợi nhuận tỷ lệ góp vốn.
- Viết ctrinh quản tập hợp người lao động trong công ty. In bảng lương của người lao
động theo thứ tự giảm dần.
Khái niệm:
- Kế thừa cho phép ta định nghĩa 1 lp mới, gọi là lớp dẫn xuất, từ các lớp đã lớp cơ
sở. Lớp dẫn xuất được kế thừa các thành phần(dữ liệu, phương thức) của các lớp cơ sở,
đồng thời cho phép thêm vào các thành phần mới, bao hàm cả việc làm tốt hơn hoặcm
lại những công việc trong lớp cơ sở chưam tốt hoặc không phù hợp với lớp dẫn xuất.
- Một lớp dẫn xuất trở thành lớp cơ sở khi nó đcng để tạo 1 lớp dẫn xuất mới. Sự kế
thừa y được gọi kế thừa nhiều mức. Ngoài ra, một lớp thể được dẫn xuất từ nhiều
lớp cơ sở.
- Lợi ích của kế thừa: Giúp sử dụng lại nguồn, giảm số dòng lệnh cần viết, dễ bảo trì
sửa đổi, rõ ràng hơn về logic.
*Đinh nghĩa lớp dẫn xuất:
Class<tên lớp dn xuất>: [public/protected/private] <Tên lớp sở 1>
[,[public/protected/private] <Tên lớp cơ sở 2>,…
{
//Khai báo, xây dựng các thành phần riêng của lớp
// đây các thành phần dữ liệu mới
// các phương thức,m riêng mới của lớp dẫn xuất
// hàm, phương thức được định nghĩa lại
};
Chú ý:
- Từ khóa private/public dùng để kiểu kế thừa. Không viết sẽ ngầm hiểu private
- Trong private, tất cả các thành phần public ca lớp sở đc thừa kế trong lớp dn xuất
trở thành các thành phần private của lớp dẫn xuất.
- Trong public, các thành phần public ca lớp sở đc thừa kế trong lp dẫn xuất sẽ tr
thành các thành phần public của lớp dẫn xuất.
- Biến phạm vi protected thì chỉ th được gọi trong:
+ Nội bộ class của
+ Lớp dẫn xuất (lớp con) của class
+ không thể gọi từ bên ngoài (sub main)
Các loại kế thừa: private>protected>public
Hàm tạo hàm hủy trong kế thừa:
- Hàm tạo và m hủy không được các lớp con kế thừa
- Mỗi hàm tạo của lớp dẫn xuất phải gọim to của lớp mẹ, nếu không sẽ ngầm hiểu
gọi hàm tạo mặc đinh
- Hàm hy củac lớp sẽ được gọi tự động theo thứ tự ngược từ lớp dẫn xuất tới lớp sở.
15. Lớp sở ảo (virtual base class)
*Lớp trừu ng (abtract class)/Phương thức ảo thuầny (pure virtual method)
- Phương thức ảo thuầny phương thức đc khai báo nhưng chưa được định nghĩa ( s
được định nghĩa trong lớp dẫn xuất. Lớp chứa phương thức ảo thuần túy gọi là lớp trừu
tượng.
-Quych: virtual <tên pơng thức>()=0;
- Chú ý:
Không thể khai báo 1 đối tượng mới thuộc lớp trừu tượng.
Trong lớp dẫn xuất kế thừa từ lp trừu tượng tphương thức ảo thuần túy th
được định nghĩa lại khác nhau.
16. Tính đa hình (polymorphism)
- Là 1 trong 4 tính chất của lthdt. Hiểu đơn giản: Tình huống khác nhau, các đối tượng có
thể những hành vi (operation hoặc function) khác nhau để p hợp vớinh huống đó.
- Trong C++, đa nh luôn đi kèm với kế thừa. Do kế thừa, 1 lớp sử dụng lại các phương
thức của lớp khác. Lớp dẫn xuất cũng th định nghĩa lại 1 số phương thức của lớp
sở.
Phương thức giống nhua nhưng mỗi đối tượng xử khác nhau. Gọi đa hình.
- Lợi ích đa hình:
Gia ng khả năng tái sử dng các đoạn code đưc viết 1 cách tổng qt thể
thay đổi các ứng xử
- Hàm push-back: Nhập thêm phần tử cho 1 mảng
Chèn tm phần tử vào cuối 1 mng
Kích thước mảng sẽ được tự động mở rộng
Dùng thuộc tính size để biết kích thước thực của vector
VD:
Using namespace std;
Int main(){
Vector<int>myVector;
myVector.push_back(5);
myVector.push_back(7);
myVector.push_back(9);
for (int i=0;i<myVector.size();i++){
cout<<myVector[i]<<””;
}
17. Sử dụng vector để lưu dữ liệu mảng
- Vector là mảng động (dynamic array) dùng để lưu trữ dữ liệu. Kc với array dùng
dedeer lưu trữ dữ liệu tuần tự bản chất tính, các vector độ linh hoạt cao hơn: Có
thẻ t động resize khi có phẩn tử được chèn hoc xóa khỏi array.
- Khai báo vector:
include<vector> // khai báo sử dụng thư viện vector
vector <object_type> varible_name;
- Một số m tươngc với vector:
Push_back(): Đẩy phẩn tử vào vị trí cuối cùng của vector: vec.push_back(24);
Assign(): n giá trị mới vào các phần tử: vec.assign(7,12):
Pop_back():Dùng để pop hoặc xóa phần tử cuối vector, đồng thời giảm kích
thước của vector đi 1 đơn vị: vec.pop_back();
Erase(): Xóa phần tử khỏi container dựa trên vị trí hoặc phm vi nhất định. Người
dùng có thể truyền vị trí của phần tcần xóa hoặc truyền phạm vi phần tử:
vec.erase(vec.begin());
Clear(): Xóa mọi phần tử của vector container: vec.clear();
Begin(): Trả về địa chỉ phần tử đu tiên của vector
End(): Trả về địa chỉ phần tử cuối cùng của vector
Size(): Trả về số lưng phần tử trong vector
Max_size(): Trả về số lượng phần tử lớn nhất vector thể cha
Empty(): Trả về true nếu vector đang trống, không thì false.
- Dùng hàm sort để sp xếp các phần tử trong vector:
#include<algorithm> //t viện khai báo
Sort(vec.begin(),vec.end(),greater<int>()); //sắp xếp giảm dn
Sort(vec.begin(),vec.end()); // sắp xếp tăng dần
CHÚ Ý: Nếu là vector chứa các phần tử kiểu struct hay là đối ng được khai
báo bởi class thì mỗi phần tử sẽ nhiều giá trị khác nhau, vậy muốn dùng hàm
sort để sp xếp các phn tử này ta cần tạo ra 1 hàm trả về giá trị bool quy định giá
trị sẽ được sử dụng là khóa sắp xếp.
- VD:
Bool ssach(const nguoild * a, const * b)
// hàm y phục vụ việc sp xếp theo thứ tự của hàm sort sử dng giá trị tiền lương
khóa sắp xếp
{
Return a->luong > b->lương;
};
Sort (Mnguoild.begin(), Mnguoild.end(),ssanh);
18. Xử dữ liệu với file
- Mục đích:
Đọc dữ liệu từ các tệp dữ liệu sẵn => không mất ng
Ghi kết quả đầu ra thành 1 tệp kết quả => xem lại khi cn
- VD:
Include<fstream> //T viện ng để khai báo
Std::ifstream filenput(“Data.txt”[,ios::in/ios::binary]); // Mở tệp dữ liệu data cùng thư
mục với project thông qua đối ơng filenput, ios::in quy định mởi file đọc dữ liệu vào
bộ nhớ (Mặc định). Ios::binary mở file kiểu nhị phân.
If(filenput.pail()) std::cout <<”failed to opem this file!”<<std::endl;
//Hàm fail() sẽ trả về giá tr true nếu việc đọc file data.txt không thành công
Filenput.close(); // lệnh này để đóng tệp đang mở
- Chế độ mở file:
Ios::in: M file để đọc dữ liệu vào. File buộc phải tồn tại trong máy tính
Ios::out: M file để ghi dữ liệu ra. File chưa tồn tại thì tạo mới
Ios::ate: Mở file để đọc ghi dữ liệu. Đặt đim bắt đầu cuối file
Ios::app: Mở file để ghi dữ liệu ra nhưng không xóa dự liệu đã trong file đó
nếu như nó đã tồn tại. Toàn bộ dữ liệu đưc ghi ở cuối file
Ios::trunc: Mở 1 file để ghi dữ liệu, nếu đã tồn tại thì xóa toàn bộ nội dung đã
có trong file và ghi đè nội dung mới lên
- Mở tệp để ghi nội dung vào:
#include<fstream> /T viện sử dụng để nhp xut dữ liệu từ file
Std::ofstream fileOutput(“Output.txt”);
fileOutput<<”Dong du lieu thu 1”<<123<<endl;
fileOutput.close();
- Đọc lần lượt dữ liệu trong tệp ra biến
While (!filenput.eof())
{
Int n;
If (filenput>>n);
//ta dùng chỉ thị >> đđọc lần lượt các giá trị kiu số int từ tệp data.txt ra biến n. Nếu
việc đọc dữ liệu kng tnh công thì filenput >> n sẽ trả về False. ( Nếu muốn ghi dữ
liệu ra file thì dùng <<)
Std::cout <<n<<””; Đọc đến đâu in ra màn hình đến đó
String line;
While (getline(filenput),line)) // ta dùng getline(filenput,line) để đc từng dòng dữ liệu từ
đối tượng filenput và lưuo biến line. Đến khi đọc hết nội dung thì cả câu lệnh
getline(infile,line) sẽ trả về giá trị False để kết thúc vòng while
{
Cout << line<<endl;
}
BTVN:
- làm lại bài gần nhất với dữ liệu được cung cấp trong 1 tệp cùng t mục với project
- tệp dữ liệu bao gồm: Soluongsinhvien, soluongmonhoc, ten và stc của mỗi môn hoc,
hotensinhvien, diemthi mỗi môn học của từng sinh viên. Hãy viết chương trình để đọc dữ
liệu từ tp bộ nhớ. Tính điểm trung bình chung in danh sách:hoten, tbc của 3 sinh
viên có điểm tb cao nhất. **Sử dụng khai báo lớp đốiợng hoặc vector

Preview text:

Lập trình hướng đối tượng -
Là phương pháp lập trình lấy đối tượng làm nền tảng để xây dựng giải thuật, chương trình -
Là pplt dựa trên kiến trúc lớp(class) và đối tượng(object) -
Class chứa nhiều object có đặc điểm giống nhau
1. Đối tượng (object) -
Được hiểu như là 1 thực thể: người, vật hoặc 1 bảng dữ liệu,… -
Mỗi đối tượng sẽ tồn tại trong 1 hệ thống và có ý nghĩa nhất định trong hệ thống -
Đối tượng giúp biểu diễn tốt hơn trên máy tính -
Gồm 2 thành phần: Thuộc tính và thao tác. 2. Lớp(class) -
Các đối tượng có đặc tính tương tự nhau được gom chung thành 1 lớp đối tượng. Một lớp
đối tượng đặc trưng bằng các thuộc tính và các hành động.
+ Thuộc tính(Attribute): 1 thành phần của đối tượng, có giá trị nhất định cho mỗi đối
tượng tại mỗi thời điểm trong hệ thống.
+ Thao tác(Operation): Thể hiện hành vi của 1 đối tượng tác động qua lại với các đối
tượng khác hoặc chính nó
⇨ Túm lại, lớp là 1 mô tả trừu tượng của các đối tượng cùng bản chất, ngược lại mỗi 1
đối tượng lại là 1 thể hiện cụ thể cho những mô tả trừu tượng đó. -
Mỗi thao tác trên 1 lớp đối tượng cụ thể ứng với 1 tình huống cụ thể khác nhau. 1 cài đặt
như vậy gọi là 1 phương thức(method) -
Cùng 1 phương thức có thể áp dụng được nhiều lớp đối tượng khác nhau – Đa hình ( polymorphism) -
Một đối tượng cụ thể thuộc 1 lớp gọi là 1 thể hiện(instance) của lớp đó. *Đặc trưng của OPP: - Đóng gói (Encapsulation) - Thừa kế (inheritance) - Đa hình (Polymorphism)
a. Đóng gói – Che dấu thông tin -
Đóng gói: nhóm những gì có liên quan đến nhau vào làm 1, để sau này có thể dùng 1 cái
tên để gọi đến những thứ được đóng gói. -
Các hàm/thủ tục đóng gói các câu lệnh -
Các đối tượng đóng gói dữ liệu của chúng và các thủ tục có liên quan -
Che dấu thông tin: Che dấu 1 số thông tin và chi tiết cài đặt nội bộ để bên ngoài k nhìn
thấy hoặc không cần hoặc bí mật. b. Thừa kế -
Là cơ chế cho phép 1 lớp D nào đó có được các thuộc tính và thao tác của lớp C, như thể
các thuộc tính và thao tác đó đã được định nghĩa tại lớp D -
Cho phép cài đặt nhiều quan hệ giữa các đối tượng: • Đặc biệt hóa • Khái quát hóa c. Đa hình -
Là 1 cơ chế cho phép 1 tên thao tác hoặc thuộc tính có thể được định nghĩa tịa nhiều lớp
và có thể có nhiều cài đặt khác nhau tại mỗi lớp trong các lớp đó. • Ưu điểm lập OPP: -
Nguyên lý kế thừa: Tránh lặp lại, tái sử dụng -
Nguyên lý đóng gói – Che dấu thông tin: Chương trình an toàn không bị thay đổi bởi
những đoạn chương trình khác - Dễ mở rộng, nâng cấp -
Mô phỏng thế giới thực tốt hơn -
Dữ liệu được đóng gói lại, được che dấu và không cho phép các hàm ngoại lai truy nhập tự do. -
Các đối tượng tác động và trao đổi thông tin với nhau qua các hàm -
Có thể dễ dàng bổ sung dữ liệu và các hàm mới vòa đối tượng nào đó khi cần thiết
Một số liên quan OPP: -
OOM (object oriented methodology): Phương pháp luận hướng đối tượng -
OOA (object oriented analysis): Phân tích hướng đối tượng -
OOD (object oriented design): Thiết kế hướng đối tượng -
OOP (object oriented programming): Lập trình hướng đối tượng 3. Khai báo lớp C++ Classs {
//khai báo các thành phần dữ liệu
//Khai báo các hàm và phương thứ Private: Protected: Public: }; -
Public: Có thể truy xuất trong bất kì hàm nào -
Private: Chỉ được truy xuất trong phạm vi lớp. Chỉ các phương thức của lớp mới có
quyền truy cập đến các thành phần private. Các thành phần public được phép sử dụng cả trong và ngoài lớp -
Trong lớp có thể có nhiều public và private. Mỗi nhãn này sẽ có phạm vi ảnh hưởng cho
đến khi gặp 1 nhãn kế tiếp hoặc hết khai báo lớp.
4. Định nghĩa hàm thành phần của lớp -
1 hàm thành phần của lớp chỉ cẩn khai báo tên hàm trong phần khai báo lớp. Nội dung
của hàm sẽ khai báo sau ở bên ngoài khai báo lớp: :: () { }
5. Khai báo và tạo lập đối tương -
Khai báo và tạo lập đối tượng: ; -
Gọi hàm thành phần của lớp .(); -> (); VD: -
Xây dựng lớp mảng số thực, trong lớp có 2 phương thức là nhập và tính tổng giá trị các phần tử của mảng. -
Ưng dụng: Cho biết thu nhập của k cán bộ, hãy viết chương trình tính ra tổng thu nhập Btap: -
Xây dựng lớp Arr2 có phương thức: NhapSL, Nhapmangso, Nhapmangchu, swap, swapc, sort,Xuatdulieu -
Áp dụng để giải bài tập: Biết tên, điểm của n sinh viên. Hãy viết chương trình để nhập dữ
liệu và in lại danh sách họ tên và điểm của sinh viên theo thứ tự giảm dần của điểm. Btap2: -
Sử dụng phương pháp lập trình hướng đối tượng để viết ctrinh nhập vào: hoten, gioitinh
và diem của n sinh viên. Tính toán và in ra 3 sinh viên nam điểm cao nhất
6. Hàm tạo (Constructor) -
Là 1 phương thức đặc biệt được gọi tự động tại thời điểm đối tượng được tạo -
Mục đích: Khởi tạo các thành phần dữ liệu của đối tượng (khai báo và thực hiện công
việc “thu xếp, dọn chỗ” cho đối tượng mới). -
Hàm tạo phải cùng tên với tên lớp và không có bất cứ kiểu gì trả về kể cả kiểu void. -
Có hàm tọa có tham số và hàm tạo không có tham số. -
Hàm tạo có tham số nhận giá trị mặc định cho phép khi chúng ta khai báo đối tượng thì
có thể có hoặc không cung cấp giá trị cho tham số tương ứng. Hàm tạo có đối mặc định
toàn phần là hàm tạo mà mọi đối số đều có giá trị mặc định. VD: Class nhanvien{ Int ms, namsinh; String ten,trinhdo,ngoaingu; Public; Nhanvien(); Nhanvien(int m,int ns){ Ms =m; Namsinh=ns; } Nhanvien(int m,string td){ Ms=m; Trinhdo = t; }
Nhanvien(int m,string td,string nn){ Ms = m; Trinhdo = td; Ngoaingu = nn; } *Giải thích:
- Hàm tạo nhanvien() gọi là hàm tạo mặc nhiên – sẽ tự động được gọi thực hiện mỗi khi đối
tượng được khởi tạo.
- Hàm tạo có tham số để cung cấp các bộ giá trị khác nhau cho các đối tượng riêng biệt. Vdu: Nhanvien vn; Nhanvien nvVanphong(1,1999);
Nhanvien nvKythuat(2,”Daihoc”);
Nhanvien nvDoingoai(3,”Caodang”,”Tienganh”); 7. Hàm hủy (Destructor) -
Là các hàm thành viên được tự động thực thi khi chương trình hủy 1 đối tượng (instance)
được tạo ra từ class, và được sử dụng với mục đích xóa và giải phóng đối tượng đó khỏi bộ nhớ. -
Nvu chính: giải phóng vùng bộ nhớ đã được sử dụng để lưu đối tượng sau khi nó bị hủy - 3 tính chất:
+ Phải kèm ~ đằng trước (~classname)
+ Không mang kiểu dữ liệu trong nó, k sử dụng void khi khai báo
+ Không có tham số, không có giá trị trả về từ nó -
Hàm hủy được chạy tự động đối với những đối tượng thông thường hoặc đối tượng được cấp phát động. - Delete [] đối tượng; *Kết luận:
- Chỉ có duy nhất 1 hàm hủy trong 1 lớp. Hàm hủy tự động được gọi. Nếu k định nghĩa hàm
hủy thì mặc định trình biên dịch sẽ tự tạo ra 1 hàm hủy mặc nhiên.
- Hàm hủy được định nghĩa có cùng tên với lớp, không có bất cứ kiểu gì trả về kể cả void,
tuy nhiên phải có ~ trước tên hàm hủy. Btap áp dụng: -
Tạo lớp(class): TS quản lý thí sinh thi đại học gồm các thành phần
+ Dữ liệu: SBD,hoten,diem toan,ly,hoa, và khuvucduthi )(=1/2/3) + Phương thức:
Voidnhap(): để nhập dữ liệu về thí sinh
Void in(): để tin thông tin về thí sinh gồm cả kết quả xét tuyển (điểm chuẩn:25)
+ Các hàm tạo (constructor)
TS() là hàm tạo không đối trong đó sẽ gán giá trị đầu các thuộc tính của thí sinh
TS(…) là hàm tạo có các tham số: SBD,hoten,diem toan,ly,hoa và khuvucduthi, mặc định kv=2 -
Viết hàm main để nhập và in thông tin của 2 thí sinh theo các tình huống hàm tạo không đối và có đối. 8. Hàm tạo sao chép -
Được gọi khi khai báo và khởi tạo nội dung 1 đối tướng mới thống qua 1 đối tượng khác -
Nhiệm vụ chính: Tạo ra 1 đối tượng mới giống hệt 1 đối tượng đang có. + Complex c1(10,2); + Complex c2=c1;
+ Complex c2(c1);// Cách viết có cùng ý nghĩa với câu lệnh trên -
Điểm khác với phép gán: Phép gán thực hiện sao chép nội dung từ đối tượng này sang
đối tượng khác -> cả 2 đối tượng c1 và c2 đã tồn tại. Hàm tạo sao chép tạo đối tượng mới
và sao chép nội dung từ đối tượng đã có -> c2 chưa tồn tại. 9. Con trỏ this -
Là 1 con trỏ đặc biệt dùng để trỏ đến địa chỉ của đối tượng hiện tại.
10. Hàm trực tuyến (inline) -
Là 1 chức năng trong C++. Là hàm được định nghĩa với từ khóa inline. Được sử dụng để
yêu cầu trình biên dịch thay thế lời gọi hàm bằng mã code của hàm nhằm mục đích giảm
thời gian chạy chương trình. Inline tên-hàm () {
//các câu lệnh trong thân hàm [return ;] }
Chú ý: Hàm inline phải được định nghĩa trước khi sử dụng trình biên dịch. Vì mã hàm
inline được biên dịch trước trước khi nó được chèn vào chương trình.
11. Nạp chồng hàm (Function overloading) -
Cho phép sử dụng cùng 1 tên hàm gọi cho nhiều hàm (có cùng mục đích) nhưng khác
nhau về kiểu dữ liệu tham số hoặc số lượng tham số.
Phân giải nạp chồng: -
Khi gọi 1 hàm nạp chồng hoặc 1 toán tử nạp chồng thì trình biên dịch sẽ qđịnh định
nghĩa thích hợp nhất để sử dụng bằng việc so sánh các kiểu tham số.
Nạp chồng toán tử: -
Là 1 tình năng cho phép bạn định nghĩa lại ý nghĩa của các toán tử cho các lớp của riêng
bạn. Khi toán tử được định nghĩa lại, bạn có thể sử dụng các toán tử này để thực hiện các
hoạt động trên các đối tượng của lớp của bạn. -
Trừ 4 toán tử k thể nạp chồng: . .* :: ?: -
Hàm nạp chồng toán tử có thể là hàm thành phần hoặc hàm bạn của lớp nhưng không thể là hàm tĩnh 12. Hàm bạn -
Là 1 hàm bên ngoài của 1 lớp nhưng được phép truy cập vào các thành viên bảo mật
(private) và các thành viên được bảo vệ (protected) của lớp đó. -
Thường được sử dụng khi ta muốn thực hiện 1 hoạt động trên các đối tượng của lớp đó
mà không phải tạo thêm các hàm thành viên của lớp. -
Là 1 hàm tự do, không thuộc lớp. Có thể có nhiều hàm bạn, và phải nằm bên ngoài class. -
Đặt từ khóa “friend” phía trước, sau đó khai báo như 1 hàm thông thường.
13. Hàm tĩnh (Static Function) -
Là 1 hàm được khai báo trong 1 lớp, nó không thuộc về 1 đối tượng cụ thể của lớp đó mà
chỉ phụ thuộc vào lớp đó. -
Không phụ thuộc vào đối tượng và có thể được gọi mà không cần tạo 1 đối tượng nào. -
Sử dụng “Static” để khai báo hàm. Các hàm tĩnh thường được sử dụng để thực hiện các
tính toán liên quan đến lớp mà không cần tạo đối tương của lớp đó.
Btap AD: Hãy viết chương trình: -
Bao gồm định nghĩa lớp sinhvien(msv,hoten) và lớp monhoc(tenmon,stc) cho phép khai
báo số lượng n sinhvien. Thực hiện nhập số liệu về thông tin sinh viên và điểm mỗi môn
học mà sinh viên đã thi. Tính điểm tbc học kì cho mỗi sinh viên và in danh sách
hoten,diemtbc cua sinhvien theo thứ tự giảm dần của điểm tbc. -
Yêu cầu: Sử dụng Hàm inline, hàm bạn, hàm tĩnh, nạp chồng hàm.
14. Dẫn xuất và kế thừa
• Tính đa hình: (Polymorphism) -
Trong công ty có nhiều người lao động: Công nhân, quản lý, lãnh đạo. Mỗi loại đối tượng
đều đc quản lý bởi những thông tin tổng quát như mã số, họ tên, ngày sinh và sđt nhưng
mỗi đối tượng sẽ có 1 bộ thuộc tính riêng và công thức tính lương riêng:
+ Công nhân: Có bậc thợ và tính lương thông qua bậc thợ và ngày công
+ Quản lý: Có trình độ đào tạo, thâm niên và hệ số lương. Tính lương dựa vào thâm niên và hệ số lương.
+ Quản lý: Có tỷ lệ góp vốn và tính lương dựa vào lợi nhuận và tỷ lệ góp vốn. -
Viết ctrinh quản lý tập hợp người lao động trong công ty. In bảng lương của người lao
động theo thứ tự giảm dần. • Khái niệm: -
Kế thừa cho phép ta định nghĩa 1 lớp mới, gọi là lớp dẫn xuất, từ các lớp đã có – lớp cơ
sở. Lớp dẫn xuất được kế thừa các thành phần(dữ liệu, phương thức) của các lớp cơ sở,
đồng thời cho phép thêm vào các thành phần mới, bao hàm cả việc làm tốt hơn hoặc làm
lại những công việc trong lớp cơ sở chưa làm tốt hoặc không phù hợp với lớp dẫn xuất. -
Một lớp dẫn xuất trở thành lớp cơ sở khi nó đc dùng để tạo 1 lớp dẫn xuất mới. Sự kế
thừa này được gọi là kế thừa nhiều mức. Ngoài ra, một lớp có thể được dẫn xuất từ nhiều lớp cơ sở. -
Lợi ích của kế thừa: Giúp sử dụng lại mã nguồn, giảm số dòng lệnh cần viết, dễ bảo trì và
sửa đổi, rõ ràng hơn về logic.
*Đinh nghĩa lớp dẫn xuất:
Class: [public/protected/private]
[,[public/protected/private] ,… {
//Khai báo, xây dựng các thành phần riêng của lớp
// đây là các thành phần dữ liệu mới
// các phương thức, hàm riêng mới của lớp dẫn xuất
// hàm, phương thức được định nghĩa lại }; • Chú ý: -
Từ khóa private/public dùng để xđ kiểu kế thừa. Không viết sẽ ngầm hiểu là private -
Trong private, tất cả các thành phần public của lớp cơ sở đc thừa kế trong lớp dẫn xuất và
trở thành các thành phần private của lớp dẫn xuất. -
Trong public, các thành phần public của lớp cơ sở đc thừa kế trong lớp dẫn xuất và sẽ trở
thành các thành phần public của lớp dẫn xuất. -
Biến có phạm vi là protected thì chỉ có thể được gọi trong: + Nội bộ class của nó
+ Lớp dẫn xuất (lớp con) của class
+ Và không thể gọi từ bên ngoài (sub main)
• Các loại kế thừa: private>protected>public
• Hàm tạo và hàm hủy trong kế thừa: -
Hàm tạo và hàm hủy không được các lớp con kế thừa -
Mỗi hàm tạo của lớp dẫn xuất phải gọi hàm tạo của lớp mẹ, nếu không sẽ ngầm hiểu là gọi hàm tạo mặc đinh -
Hàm hủy của các lớp sẽ được gọi tự động theo thứ tự ngược từ lớp dẫn xuất tới lớp cơ sở.
15. Lớp cơ sở ảo (virtual base class)
*Lớp trừu tượng (abtract class)/Phương thức ảo thuần túy (pure virtual method)
- Phương thức ảo thuần túy là phương thức đc khai báo nhưng chưa được định nghĩa ( sẽ
được định nghĩa trong lớp dẫn xuất. Lớp chứa phương thức ảo thuần túy gọi là lớp trừu tượng. -Quy cách: virtual ()=0; - Chú ý:
• Không thể khai báo 1 đối tượng mới thuộc lớp trừu tượng.
• Trong lớp dẫn xuất có kế thừa từ lớp trừu tượng thì phương thức ảo thuần túy có thể
được định nghĩa lại khác nhau.
16. Tính đa hình (polymorphism) -
Là 1 trong 4 tính chất của lthdt. Hiểu đơn giản: Tình huống khác nhau, các đối tượng có
thể có những hành vi (operation hoặc function) khác nhau để phù hợp với tính huống đó. -
Trong C++, đa hình luôn đi kèm với kế thừa. Do kế thừa, 1 lớp sử dụng lại các phương
thức của lớp khác. Lớp dẫn xuất cũng có thể định nghĩa lại 1 số phương thức của lớp cơ sở.
⇨ Phương thức giống nhua nhưng mỗi đối tượng xử lý khác nhau. Gọi là đa hình. - Lợi ích đa hình:
• Gia tăng khả năng tái sử dụng các đoạn code được viết 1 cách tổng quát và có thể thay đổi các ứng xử -
Hàm push-back: Nhập thêm phần tử cho 1 mảng
• Chèn thêm phần tử vào cuối 1 mảng
• Kích thước mảng sẽ được tự động mở rộng
• Dùng thuộc tính size để biết kích thước thực của vector • VD: Using namespace std; Int main(){ VectormyVector; myVector.push_back(5); myVector.push_back(7); myVector.push_back(9); for (int i=0;icout<}
17. Sử dụng vector để lưu dữ liệu mảng -
Vector là mảng động (dynamic array) dùng để lưu trữ dữ liệu. Khác với array – dùng
dedeer lưu trữ dữ liệu tuần tự và cí bản chất tính, các vector có độ linh hoạt cao hơn: Có
thẻ tự động resize khi có phẩn tử được chèn hoặc xóa khỏi array. - Khai báo vector:
• include // khai báo sử dụng thư viện vector • vector varible_name; -
Một số hàm tương tác với vector:
• Push_back(): Đẩy phẩn tử vào vị trí cuối cùng của vector: vec.push_back(24);
• Assign(): Gán giá trị mới vào các phần tử: vec.assign(7,12):
• Pop_back():Dùng để pop hoặc xóa phần tử ở cuối vector, đồng thời giảm kích
thước của vector đi 1 đơn vị: vec.pop_back();
• Erase(): Xóa phần tử khỏi container dựa trên vị trí hoặc phạm vi nhất định. Người
dùng có thể truyền vị trí của phần tử cần xóa hoặc truyền phạm vi phần tử: vec.erase(vec.begin());
• Clear(): Xóa mọi phần tử của vector container: vec.clear();
• Begin(): Trả về địa chỉ phần tử đầu tiên của vector
• End(): Trả về địa chỉ phần tử cuối cùng của vector
• Size(): Trả về số lượng phần tử có trong vector
• Max_size(): Trả về số lượng phần tử lớn nhất vector có thể chứa
• Empty(): Trả về true nếu vector đang trống, không thì false. -
Dùng hàm sort để sắp xếp các phần tử trong vector:
• #include //thư viện khai báo
• Sort(vec.begin(),vec.end(),greater()); //sắp xếp giảm dần
• Sort(vec.begin(),vec.end()); // sắp xếp tăng dần
• CHÚ Ý: Nếu là vector chứa các phần tử kiểu struct hay là đối tượng được khai
báo bởi class thì mỗi phần tử sẽ có nhiều giá trị khác nhau, vì vậy muốn dùng hàm
sort để sắp xếp các phẩn tử này ta cần tạo ra 1 hàm trả về giá trị bool quy định giá
trị sẽ được sử dụng là khóa sắp xếp. - VD:
Bool ssach(const nguoild * a, const * b)
// hàm này phục vụ việc sắp xếp theo thứ tự của hàm sort sử dụng giá trị tiền lương là khóa sắp xếp {
Return a->luong > b->lương; };
Sort (Mnguoild.begin(), Mnguoild.end(),ssanh);
18. Xử lý dữ liệu với file - Mục đích:
• Đọc dữ liệu từ các tệp dữ liệu có sẵn => không mất công
• Ghi kết quả đầu ra thành 1 tệp kết quả => xem lại khi cần - VD:
Include //Thư viện dùng để khai báo
Std::ifstream filenput(“Data.txt”[,ios::in/ios::binary]); // Mở tệp dữ liệu data cùng thư
mục với project thông qua đối tương filenput, ios::in là quy định mởi file đọc dữ liệu vào
bộ nhớ (Mặc định). Ios::binary là mở file kiểu nhị phân.
If(filenput.pail()) std::cout <<”failed to opem this file!”<//Hàm fail() sẽ trả về giá trị là true nếu việc đọc file data.txt không thành công
Filenput.close(); // lệnh này để đóng tệp đang mở - Chế độ mở file:
• Ios::in: Mở file để đọc dữ liệu vào. File buộc phải tồn tại trong máy tính
• Ios::out: Mở file để ghi dữ liệu ra. File chưa tồn tại thì tạo mới
• Ios::ate: Mở file để đọc và ghi dữ liệu. Đặt điểm bắt đầu ở cuối file
• Ios::app: Mở file để ghi dữ liệu ra nhưng không xóa dự liệu đã có trong file đó
nếu như nó đã tồn tại. Toàn bộ dữ liệu được ghi ở cuối file
• Ios::trunc: Mở 1 file để ghi dữ liệu, nếu nó đã tồn tại thì xóa toàn bộ nội dung đã
có trong file và ghi đè nội dung mới lên -
Mở tệp để ghi nội dung vào:
#include /Thư viện sử dụng để nhập và xuất dữ liệu từ file
Std::ofstream fileOutput(“Output.txt”);
fileOutput<<”Dong du lieu thu 1”<<123<fileOutput.close(); -
Đọc lần lượt dữ liệu trong tệp ra biến While (!filenput.eof()) { Int n; If (filenput>>n);
//ta dùng chỉ thị >> để đọc lần lượt các giá trị kiểu số int từ tệp data.txt ra biến n. Nếu
việc đọc dữ liệu không thành công thì filenput >> n sẽ trả về False. ( Nếu muốn ghi dữ
liệu ra file thì dùng <<) Std::cout < String line;
While (getline(filenput),line)) // ta dùng getline(filenput,line) để đọc từng dòng dữ liệu từ
đối tượng filenput và lưu vào biến line. Đến khi đọc hết nội dung thì cả câu lệnh
getline(infile,line) sẽ trả về giá trị False để kết thúc vòng while { Cout << line<} BTVN: -
làm lại bài gần nhất với dữ liệu được cung cấp trong 1 tệp cùng thư mục với project -
Có tệp dữ liệu bao gồm: Soluongsinhvien, soluongmonhoc, ten và stc của mỗi môn hoc,
hotensinhvien, diemthi mỗi môn học của từng sinh viên. Hãy viết chương trình để đọc dữ
liệu từ tệp và bộ nhớ. Tính điểm trung bình chung và in danh sách:hoten, tbc của 3 sinh
viên có điểm tb cao nhất. **Sử dụng khai báo lớp đối tượng hoặc vector
Document Outline

  • 1. Đối tượng (object)
  • 2. Lớp(class)
  • a. Đóng gói – Che dấu thông tin
  • b. Thừa kế
  • c. Đa hình
  • • Ưu điểm lập OPP:
  • • Một số liên quan OPP:
  • 3. Khai báo lớp C++
  • 4. Định nghĩa hàm thành phần của lớp
  • 5. Khai báo và tạo lập đối tương
  • 6. Hàm tạo (Constructor)
  • 7. Hàm hủy (Destructor)
  • 8. Hàm tạo sao chép
  • 9. Con trỏ this
  • 10. Hàm trực tuyến (inline)
  • 11. Nạp chồng hàm (Function overloading)
  • Phân giải nạp chồng:
  • Nạp chồng toán tử:
  • 12. Hàm bạn
  • 13. Hàm tĩnh (Static Function)
  • 14. Dẫn xuất và kế thừa
  • • Khái niệm:
  • 15. Lớp cơ sở ảo (virtual base class)
  • 16. Tính đa hình (polymorphism)
  • 17. Sử dụng vector để lưu dữ liệu mảng
  • 18. Xử lý dữ liệu với file