Học Hướng Đối Tượng là một cách tuyệt vời để nâng cao trình độ lập trình của bạn. Khi thực thi đúng, Hướng Đối Tượng sẽ giúp bạn tạo ra những mã lệnh dễ đọc, dễ bảo trì và mang tính di động cao, giúp cho bạn tiết kiệm được rất nhiều thời gian làm việc.
3. 1. Xây dựng lớp và đối tượng
a. Khai báo
class <tên_lớp>
{
[quyền truy xuất:]
//khai báo các thành phần dữ liệu của lớp
[quyền truy xuất:]
//khai báo các thành phần hàm của lớp
};
NIIT.vn 3/20
4. a. Khai báo
Trong đó:
<tên_lớp>:
do người dùng đặt
tuân theo các qui tắc về tên
Ví dụ: Student, NGUOI, HoaDon, ps, MaTran…
NIIT.vn 4/20
5. a. Khai báo
[quyền truy xuất:]
Là khả năng truy xuất thành phần dữ liệu
Ngầm định là private
private (dành riêng) : trong phạm vi lớp đó
public (dùng chung) : ở mọi nơi nếu đối tượng tồn tại
protected (bảo vệ) : phạm vi lớp đó và các lớp con kế
thừa
NIIT.vn 5/20
6. a. Khai báo
Thành phần của lớp
Có thể gồm:
Dữ liệu
Thuộc tính truy xuất
Phương thức
NIIT.vn 6/20
7. a. Khai báo
Khai báo thành phần
Dữ liệu:
Tương tự như khai báo biến
<kiểu dữ liệu > <tên_thành_phần>;
Chú ý: không được khởi tạo giá trị ban đầu
NIIT.vn 7/20
8. a. Khai báo
Khai báo thành phần
Hàm thành phần
• Cách 1: Khai báo nguyên mẫu trong lớp và định
nghĩa ngoài lớp
<kiểu trả về > tênlớp::<tên_hàm>([đối số])
{
// <thân hàm>
}
• Cách 2: định nghĩa ngay trong lớp
NIIT.vn 8/20
9. a. Khai báo
Ví dụ 1:
Xây dựng cấu trúc dữ liệu mô tả sinh viên:
Dữ liệu: họ tên, năm sinh, giới tính, Điểm toán,
lý, hóa
Phương thức: nhập, tính đtb, in
Lớp sinh viên
NIIT.vn 9/20
10. a. Khai báo
Ví dụ 2:
Xây dựng cấu trúc dữ liệu mô tả các phân số:
Dữ liệu: tử số, mẫu số
Phương thức: nhập, tối giản, in
Lớp các phân số
NIIT.vn 10/20
11. a. Khai báo
Ví dụ 3:
Xây dựng cấu trúc dữ liệu mô tả các hóa đơn:
Dữ liệu: mã vật tư, tên vật tư, loại phiếu, ngày
lập, khối lượng, đơn giá, thành tiền…
Phương thức: nhập, tính thành tiền, in
Lớp các hóa đơn
NIIT.vn 11/20
12. b. Khai báo đối tượng
Cú pháp:
<tên_lớp> <tên_đối_tượng>;
Ví dụ: khai báo 2 đối tượng sinh viên
Student sv1, sv2;
Khi đó sv1, sv2 là hai đối tượng sinh viên
NIIT.vn 12/20
13. c. Truy xuất thành phần
Dữ liệu
<tên_đối_tượng>.<tên_tp_dữ liệu>;
Ví dụ: truy xuất họ tên và năm sinh của sv
Sv1.Hten;
Sv2.Ns;
Nếu là con trỏ: <tên_con_trỏ>-><tên_tp_dữ liệu>;
NIIT.vn 13/20
14. c. Truy xuất thành phần
Thành phần hàm
<tên_đối_tượng>.<tên_hàm>([ds đối số]);
Ví dụ: truy xuất phương thức nhập và in của sv
sv1.nhap();
sv2.in();
Với con trỏ: <tên_con_trỏ>-><tên_hàm>([đối số]);
NIIT.vn 14/20
15. Ví Dụ 1: Nhập thông tin của một sinh viên và xuất ra thông tin đã nhập
#include <iostream.h>
class Student
{
private:
char Hten[30], Gtinh[5];
int Ns;
float Dtoan,Dly,Dhoa;
public:
void nhap()
{
cout << “Nhap vao Ho ten sinh vien: “;
cin >> Hten ;
cout << “Nhap vao nam sinh: “;
cin >> Ns ;
cout << “Nhap vao gioi tinh: “;
cin >> Gtinh ;
cout << “Nhap vao diem toan: “;
cin >> Dtoan ;
cout << “Nhap vao diem ly: “;
cin >> Dly ;
cout << “Nhap vao diem hoa: “;
cin >> Dhoa ;
} //ket thuc ham nhap
NIIT.vn 15/20
16. float diemtb()
{
return ((Dtoan+Dly+Dhoa)/3);
} // ket thuc ham diemtb
void in()
{
cout<< Hten<<‘t’<<Ns<<‘t’<<Gtinh<<endl;
cout<<”Diem toan:”<< Dtoan<<endl;
cout<<”Diem ly:”<< Dly<<endl;
cout<<”Diem hoa:”<< Dhoa<<endl;
cout<<”Diem trung binh:”<<diemtb()<<endl;
} // ket thuc ham in
};// ket thuc lop Student
void main()
{
Student SV;
SV.nhap();
SV.in();
}// ket thuc ham main
NIIT.vn 16/20
17. Ví dụ 2: Nhập ngày tháng năm. Kiểm tra tính hợp lệ và in ra ngày tháng năm đã
nhập.
#include <iostream.h>
#include <conio.h>
#define FALSE 0
#define TRUE !FALSE
static char* Thang[]={"","gieng”,"hai”,"ba”,"bon”,"nam”,"sau”,"bay”,
"tam“,"chin”,"muoi","muoi mot","chap"};
static char* Thu[]={"","Chu nhat”,"hai”,"ba“,"tu","nam”,"sau”,"bay"};
static NgayThang[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
class CDate
{
private:
int mNgay,mThang,mNam;
int laNamNhuan(int);
public:
void nhap();
int hopLe();
void in();
};
NIIT.vn 17
18. void CDate::nhap()
{
cout<<endl<<"Ngay: ";
cin>>mNgay;
cout<<endl<<"Thang: ";
cin>>mThang;
cout<<endl<<"Nam: ";
cin>>mNam;
}
int CDate::hopLe()
{
if ((mThang<1)||(mThang>12)) return FALSE;
else
{
if ((mNgay>=1)&&(mNgay<=NgayThang[mThang])) return TRUE;
else if ((mNgay==29)&&laNamNhuan(mNgay)) return TRUE;
else return FALSE;
}
}
NIIT.vn 18
19. int CDate::laNamNhuan(int nam)
{
if (((nam%400)==0)||(((nam%4)==0)&&((nam%100)!=0))) return TRUE;
else return FALSE;
}
void CDate::in()
{
cout<<endl<<“Ngay da nhap "<<mNgay;
cout<<" thang "<<Thang[mThang];
cout<<" nam "<<mNam;
}
int main()
{
CDate ngay;
ngay.nhap();
if (ngay.hopLe()) ngay.in();
else cout<<“NHAP NGAY KHONG HOP LE";
getch();
return 0;
}
NIIT.vn 19
20. Ví dụ 3: Nhập một chuỗi ký tự. Xuất ra chuỗi đã nhập.
#include <iostream.h>
#include <string.h>
class CString
{ public:
int ChieuDai();
void Xuat();
int Nhap(char* s);
private:
int mLength;
char* mPtr;
};
int CString::Nhap(char *s)
{ mLength = strlen(s);
mPtr = new char[mLength + 1];
if (mPtr == NULL) return 0;
strcpy(mPtr,s);
return 1;
}
void CString::Xuat()
{ cout << mPtr; NIIT.vn 20
}
24. void main()
{
CTime one, two, three;
cout << "n Nhap vao thoi gian mot (gio phut giay): ";
one.getinfo();
cout << "n Nhap vao thoi gian hai (gio phut giay): ";
two.getinfo();
three.addit(one, two);
cout << "Ket qua la ";
three.display();
getch();
}
NIIT.vn 24
25. 2. Các phương thức
Một đối tượng thường có 4 kiểu hành vi cơ bản:
Các phương thức khởi tạo: Constructor
Các phương thức truy vấn: Queries
Các phương thức cập nhập: Updates
Các phương thức hủy: Destructor
NIIT.vn 25
26. a. Hàm khởi tạo
Khai báo:
<tên_lớp>([ds tham số]);
Định nghĩa ngoài lớp:
<tên_lớp>::<tên_lớp>([ds tham số])
{
//thân hàm
}
NIIT.vn 26
27. a. Hàm khởi tạo (tiếp)
Như vậy hàm khởi tạo:
Có với mọi lớp
Tên hàm giống tên lớp
Không có kiểu nên không cần khai báo
Không có giá trị trả về
Nếu không xây dựng thì chương trình tự động
sinh hàm khởi tạo mặc định
Được gọi tự động khi khai báo thể hiện của lớp
NIIT.vn 27
28. a. Hàm khởi tạo (tiếp)
Một số hàm khởi tạo:
- Hàm khởi tạo mặc định: default constructor
- Hàm khởi tạo sao chép: copy constructor
Khai báo:
<tên_lớp>(const <tên_lớp> &<tên_tham_số>)
Đối tượng mới sẽ là bản sao của đối tượng đã có
NIIT.vn 28
29. Ví dụ:
class CDate
{
private:
int mNgay,mThang,mNam;
int hopLe(int,int,int);
public:
CDate();// hàm khởi tạo mặc định
CDate(int,int,int);//hàm khởi tạo có đối số
int ganNgay(int);
int ganThang(int);
int ganNam(int);
void doc() const;
int docNgay() const;
int docThang() const;
int docNam() const;
int laNamNhuan() const;
CDate cong(int soNgay = 1);
CDate tru(int soNgay = 1); NIIT.vn 29
};
31. b. Hàm hủy - Destructor
Khai báo:
~<tên_lớp>();
Chức năng:
- Hủy bỏ, giải phóng các đối tượng khi nó hết phạm vi
tồn tại
NIIT.vn 31
32. b. Hàm hủy (tiếp)
Như vậy hàm hủy:
Không có đối số
Không có giá trị trả về
Không định nghĩa lại
Trùng tên với lớp và có dấu ~ ở trước
Thực hiện một số công việc trước khi hệ thống
giải phóng bộ nhớ
Chương trình dịch tự động sinh hàm hủy mặc
định NIIT.vn 32
33. 3. Toán tử đa năng
Cú pháp:
<kiểu trả về>operator<tên toán tử>([ds tham số])
Định nghĩa ngoài lớp:
<kiểu trả về><tên_lớp>::operator<tên toán tử>([ds
tham số])
{
//thân hàm
} NIIT.vn 33
34. 3. Toán tử đa năng (tiếp)
Ví dụ:
Toán tử đa năng +, * của lớp phân số
Toán tử đa năng+ vector
Chú ý:
Chỉ có thể định nghĩa lại các toán tử ở trên
Không làm thay đổi độ ưu tiên của các toán tử
Với toán tử 2 ngôi: toán tử bên trái là ẩn toán
tử bên phải là đối số
Do đó: số tham số bằng số toán hạng - 1
NIIT.vn 34
35. 3. Toán tử đa năng (tiếp)
Cách gọi hàm toán tử:
Dùng như cú pháp thông thường của phép toán
Ví dụ: PS a,b,c; c=a+b;
Dùng như hàm thành phần của đối tượng
Ví dụ:
PS a,b,c;
c=a.operator+(b);
NIIT.vn 35
36. Bài tập
1. Xây dựng lớp phân số gồm các thành phần:
-DL: tử số, mẫu số
-Pt: nhập, in, tối giản, so sánh 2 ps
Hàm main:
-Nhập mảng có n phân số (n<=10)
-Sắp xếp mảng PS theo thứ tự giảm dần
-In mảng sau khi xếp
NIIT.vn 36
37. Bài tập
2. Xây dựng lớp số phức gồm các thành phần:
-DL: phần thực, phần ảo
-Pt: nhập, in, tính pt 2 + pa2 , nhân, chia 2 số phức
Hàm main:
-Nhập 2 số phức
-Tính và in tổng, hiệu hai số phức
-In mảng sau khi xếp
NIIT.vn 37
38. Bài tập
3. Xây dựng lớp vectơ gồm các thành phần:
-DL: số phần tử, mảng các phần tử
-Pt: nhập, in, tổng 2 vectơ, tích vô hướng
Hàm main:
-Nhập 2 vectơ
-Tính và in tổng a+b
NIIT.vn 38
39. Bài tập
4. Xây dựng lớp ma trận gồm các thành phần:
-DL: số dòng, số cột, mảng các phần tử
-Pt: nhập, in, kiểm tra ma trận có là đơn vị không
Hàm main:
-Nhập ma trận a
-Thông báo có là ma trận đơn vị không
-In ma trận
NIIT.vn 39
40. Bài tập
5. Xây dựng lớp sinh viên gồm các thành phần:
-DL: họ tên, ngày sinh, giới tính, lớp ,điểm toán, lý, hóa,
đtb
-Pt: nhập, in, tính điểm trung bình
Hàm main:
-Nhập danh sách sinh viên
-Sắp xếp theo điểm trung bình giảm dần
-In danh sách sau khi sắp xếp
NIIT.vn 40
41. Bài tập
6. Xây dựng lớp hóa đơn gồm các thành phần:
-DL: mã vật tư, tên vật tư, loại phiếu, ngày lập, khối lượng,
đơn giá, thành tiền
-Pt: nhập, in, kiểm tra phiếu nhập hay xuất
Hàm main:
-Nhập danh sách hóa đơn
-Tính thành tiền cho các hóa đơn và in tổng thành tiền
-In danh sách sau khi xếp theo số tiền giảm dần
NIIT.vn 41
43. Mọi thắc mắc sẽ được giải đáp trong khóa học
LậP TRÌNH WEB VớI JAVA/JSP/SERVLET tại
Học viện NIIT INET
Liên hệ: 0904 840 550 (Ms Mai)
Email: maintn@inet.vn NIIT.vn