Bài giảng chương 3: Lớp và đối tượng
a. Khaibáo
class
Bạn đang xem trước 20 trang tài liệu Bài giảng chương 3: Lớp và đối tượng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
3/7/2014 8:40 πμ 1
Hà Văn Sang
Bộ môn: Tin học TC – KT
Khoa: Hệ Thống Thông Tin Kinh tế - Học Viện Tài
Chính
Tel: 0982.165.568
Email: sanghv@hvtc.edu.vn
Website:
Lập trình hướng đối tượng
3/7/2014 8:40 πμ 2
CHƯƠNG III
3/20
1. Xây dựng lớp và đối tượng
a. Khai báo
class
{
[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
};
4/20
a. Khai báo
Trong đó:
:
do người dùng đặt
tuân theo các qui tắc về tên
Ví dụ: SV, NGUOI, Hoa_Don, ps, Ma_Tran…
5/20
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
priate: trong phạm vi lớp đó
public: ở mọi nơi nếu đối tượng tồn tại
protected: phạm vi lớp đó và các lớp con kế thừa
6/20
a. Khai báo
Thành phần của lớp
Có thể gồm:
Dữ liệu
Thuộc tính
Phương thức
7/20
a. Khai báo
Khai báo thành phần
Dữ liệu:
Tương tự như khai báo biến
;
Chú ý: không được khởi tạo giá trị ban đầu
8/20
a. Khai báo
Khai báo thành phần
Hàm thành phần
Cách 1: Khai báo trong lớp và định nghĩa ngoài lớp
tênlớp::([đối sô])
{
//
}
Cách 2: định nghĩa ngay trong lớp
9/20
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, ngày sinh, giới tính, Điểm toán,
lý, hóa, Đtb
Phương thức: nhập, tính đtb, in
Lớp sinh viên
10/20
a. Khai báo
Ví dụ 2:
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
11/20
a. Khai báo
Ví dụ 3:
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ố
12/20
b. Khai báo đối tượng
Cú pháp:
;
Ví dụ: khai báo 2 đối tượng sinh viên
SV sv1, sv2;
Khi đó sv1, sv2 là hai đối tượng sinh viên
13/20
c. Truy xuất thành phần
Dữ liệu
.;
Ví dụ: truy xuất họ tên và ngày sinh của sv
sv1.ht;
sv2.ns;
Nếu là con trỏ: ->;
14/20
c. Truy xuất thành phần
Thành phầ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ỏ: ->.([đối số]);
15/20
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
16/20
a. Hàm khởi tạo
Khai báo:
([ds tham số]);
Định nghĩa ngoài lớp:
::([ds tham số])
{
//thân hàm
}
17/20
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
18/20
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:
(const &)
Đối tượng mới sẽ là bản sao của đối tượng đã có
19/20
b. Hàm hủy - Destructor
Khai báo:
~();
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
20/20
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
21/20
3. Nạp chồng toán tử
Cú pháp:
operator([ds tham số])
Định nghĩa ngoài lớp:
::operator([ds
tham số])
{
//thân hàm
}
22/20
3. Nạp chồng toán tử (tiếp)
Ví dụ:
Nạp chồng toán tử +, * của lớp phân số
Nạp chồng toán tử + vector
Danh sách các toán tử có thể nạp chồng:
+ - * / = += -= *= /= >
>= == != = ++ -- % & ^ ! |
~ &= ^= |= && || %= [] () , ->* ->
new
delete new[] delete[]
23/20
3. Nạp chồng toán tử (tiếp)
Chú ý:
Chỉ có thể định nghia 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
24/20
3. Nạp chồng toán tử (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);
25/20
Bài tập (week 4)
• Nạp chồng các toán tử của các bài tập trong
tuần 3
26/20
Bài tập (week 3)
• Sử dụng TC++ để lập trình:
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
27/20
Bài tập (week 3)
• Sử dụng TC++ để lập trình:
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 , 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
papt
22
28/20
Bài tập (week 3)
• Sử dụng TC++ để lập trình:
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
29/20
Bài tập (week 3)
• Sử dụng TC++ để lập trình:
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
30/20
Bài tập (week 3)
• Sử dụng TC++ để lập trình:
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 (k43/41.01),đ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 xếp
31/20
Bài tập (week 3)
• Sử dụng TC++ để lập trình:
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
32/20
Qui cách nộp bài
Gửi tới địa chỉ: sanghv@gmail.com
CC: sanghv@hvtc.edu.vn
Tiêu đề:
[Lớp][BT3][Stt][Họ và tên]
Ví dụ:
[K43/41.01][BT3][14][Lê hoàng Vũ]
Hạn nộp: 23h59’ ngày 29/01/2008
3/7/2014 8:39 πμ 1
Hà Văn Sang
Bộ môn: Tin học TC – KT
Khoa: Hệ Thống Thông Tin Kinh tế - Học Viện Tài
Chính
Tel: 0982.165.568
Email: sanghv@hvtc.edu.vn
Website:
Lập trình hướng đối tượng
3/7/2014 8:39 πμ 2
CHƯƠNG III
3/20
4. Mảng và con trỏ của đối tượng
Khai báo
[spt];
Ví dụ: SV sinhvien[50]; PS a[8];
*;
Ví dụ: SV *p = sinhvien;
4/20
5. Hàm bạn và lớp bạn
Khái niệm hàm bạn:
Hàm bạn của một lớp là hàm không phải là
thành phần của lớp
Nhưng có khả năng truy xuất đến mọi thành
phần của đối tượng
Cú pháp:
friend (tham số);
Sau đó định nghĩa hàm ở ngoài lớp như các hàm
tự do khác
5/20
5. Hàm bạn và lớp bạn (tiếp)
Ví dụ:
Xây dựng lớp PS với phép toán: +, -, toán tử
nhập (>>), toán tử xuất (<<)
Toán tử >>, << đã được xây dựng với các kiểu
dữ liệu chuẩn như int, char, float …
Với các kiểu dữ liệu mới ta phải xây dựng lại:
istream& operator>>(istream& is, PS &x);
Trả về bộ nhớ
đệm
Phải thay đổi
để phù hợp
Giá trị có thể
thay đổi
6/20
5. Hàm bạn và lớp bạn (tiếp)
Nhận xét
Hàm bạn không phải là hàm thành viên nên
không bị ảnh hưởng của từ khoá truy xuất
Không hạn chế số lượng hàm bạn
Hàm bạn của một lớp có thể là hàm tự do
Hàm bạn của một lớp có thể là hàm thành phần
của một lớp khác
7/20
5. Hàm bạn và lớp bạn (tiếp)
Khái niệm lớp bạn:
Lớp A là lớp bạn của lớp B nếu trong B có
chứa khai báo:
friend class A;
Vậy:
Nếu A là lớp bạn của B thì mọi hàm thành phần
của A sẽ trở thành hàm bạn của B
8/20
6. Thành phần tĩnh
a. Dữ liệu tĩnh
Khái niệm:
Là thành phần dữ liệu của lớp nhưng không gắn
cụ thể với đối tượng nào
Dùng chung cho toàn bộ lớp
Các đối tượng của lớp đều dùng chung thành
phần tĩnh này
9/20
6. Thành phần tĩnh
a. Dữ liệu tĩnh
Khai báo:
static ;
Ví dụ:
class PS{ int ts, ms;
static int count;
public:
PS(int m=0, int n=1){ ts=t; ms=m; count++;}
};
10/20
6. Thành phần tĩnh
a. Dữ liệu tĩnh
Truy xuất:
Theo đối tượng (cách thông thường)
Ví dụ:
PS a;
a.count=0;
Theo lớp
Ví dụ:
PS::count=0;
11/20
6. Thành phần tĩnh
a. Dữ liệu tĩnh
Chú ý:
Tồn tại ngay khi chưa có đối tượng nào
Phải được khởi tạo trước khi đối tượng phát sinh
Phải khởi tạo ngoài mọi hàm theo cú pháp:
:: = ;
Ví dụ: int PS::count=0;
12/20
Ví dụ:
• Xây dựng lớp Hóa đơn có một thành phần dữ liệu
tĩnh để kiểm soát số đối tượng HĐ được cấp phát.
13/20
6. Thành phần tĩnh
b. Phương thức tĩnh
Khái niệm:
là hàm thành phần của lớp nhưng không gắn
với đối tượng cụ thể nào
Dùng để thao tác chung cho lớp
Trong thân hàm không có đối tượng ẩn
static (tham số);
Ví dụ: xây dựng lớp SV gồm pt nhập, in 1 sinh
viên. Nhập, in danh sách sinh viên.
14/20
7. Thành phần hằng
a. Dữ liệu hằng
Khái niệm:
là thành phần dữ liệu của lớp nhưng không
thay đổi giá trị trong quá trình tồn tại
Ví dụ: Với lớp nhân sự thì số CMT là tp hằng
Khai báo:
const ;
Thành phần hằng không thể thay đối sau khi đối
tượng được hình thành
15/20
7. Thành phần hằng
a. Dữ liệu hằng
Xác định giá trị:
ở hàm khởi tạo
Ví dụ: NS(int k=0):scmt(k){…}
Cú pháp
([ds tham số]):(đối số)
,(đối số)
….
{
//thân hàm khởi tạo
}
16/20
7. Thành phần hằng
b. Phương thức hằng
Khái niệm:
là hàm thành phần của lớp nhưng không có
khả năng thay đổi thành phần dl trong đối tượng
Ví dụ: Với lớp PS thì phương thức in() là hằng
Khai báo:
(tham số) const ;
Định nghĩa:
::(tham số) const
{ //thân hàm }
17/20
8. Thành phần đối tượng
Khái niệm:
là thành phần dữ liệu của lớp có kiểu là một
lớp khác
Khai báo:
Ví dụ: thành phần ns của lớp SV là đối tượng lớp
date
18/20
Bài tập (week 5)
• Xây dựng các toán tử nhập >>, xuất << của các
bài tập trong tuần 4
• Nạp chồng các toán tử ==, !=, >, =, <= của
các bài tập trong tuần 4
19/20
Qui cách nộp bài
Gửi tới địa chỉ: sanghv@gmail.com
CC: sanghv@hvtc.edu.vn
Tiêu đề:
[Lớp][BT3][Stt][Họ và tên]
Ví dụ:
[K43/41.01][BT3][14][Lê hoàng Vũ]
Hạn nộp: 23h59’ ngày 29/01/2008