Tải bản đầy đủ (.ppt) (26 trang)

Hướng đối tượng toàn tập 3

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (498.55 KB, 26 trang )

1Phương pháp lập trình hướng đối tượng – GV. Nguyễn Minh Huy
Hàm dựng,
Hàm dựng,
Hàm hủy,
Hàm hủy,
Hàm toán tử
Hàm toán tử
2
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Nội dung
Nội dung

Hàm dựng.
Hàm dựng.

Hàm hủy.
Hàm hủy.

Hàm toán tử.
Hàm toán tử.

Bài tập.
Bài tập.
3
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Nội dung
Nội dung

Hàm dựng.


Hàm dựng.

Hàm hủy.
Hàm hủy.

Hàm toán tử.
Hàm toán tử.

Bài tập.
Bài tập.
4
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Hàm dựng
Hàm dựng

Khi đối tượng vừa được tạo:
Khi đối tượng vừa được tạo:

Giá trị các thuộc tính bằng bao nhiêu?
Giá trị các thuộc tính bằng bao nhiêu?

Đối tượng cần có thông tin ban đầu.
Đối tượng cần có thông tin ban đầu.

Giải pháp:
Giải pháp:

Xây dựng phương thức cung cấp thông tin.
Xây dựng phương thức cung cấp thông tin.





Người dùng quên gọi?!
Người dùng quên gọi?!



Làm khai sinh” cho đối tượng!
Làm khai sinh” cho đối tượng!
PhanSo

Tử số??

Mẫu số??
PhanSo

Tử số??

Mẫu số??
HocSinh

Họ tên??

Điểm văn??

Điểm toán??
HocSinh


Họ tên??

Điểm văn??

Điểm toán??
Hàm dựng ra đời!!
Hàm dựng ra đời!!
5
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Hàm dựng
Hàm dựng

Tính chất hàm dựng (constructor):
Tính chất hàm dựng (constructor):

Tự động thực hiện khi đối tượng được tạo.
Tự động thực hiện khi đối tượng được tạo.

Có thể nạp chồng nhiều hàm dựng.
Có thể nạp chồng nhiều hàm dựng.

Trong C++, hàm dựng có tên trùng tên lớp.
Trong C++, hàm dựng có tên trùng tên lớp.
class PhanSo
class PhanSo
{
{
private:
private:

int
int
m_iTuSo;
m_iTuSo;
int
int
m_iMauSo;
m_iMauSo;
public:
public:
PhanSo(int iTuSo, int iMauSo);
PhanSo(int iTuSo, int iMauSo);
PhanSo(int iGiaTri);
PhanSo(int iGiaTri);
};
};
void main()
void main()
{
{
PhanSo p1(1, 2);
PhanSo p1(1, 2);
PhanSo *p2 = new PhanSo(5);
PhanSo *p2 = new PhanSo(5);
}
}
6
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Hàm dựng

Hàm dựng

Hàm dựng mặc định (default constructor):
Hàm dựng mặc định (default constructor):

Khi lớp không có hàm dựng?
Khi lớp không có hàm dựng?




Trình biên dịch cung cấp hàm hựng mặc định.
Trình biên dịch cung cấp hàm hựng mặc định.

Tính chất:
Tính chất:

Không tham số.
Không tham số.

Khởi tạo mặc định các thuộc tính.
Khởi tạo mặc định các thuộc tính.
class PhanSo
class PhanSo
{
{
private:
private:
int
int

m_iTuSo;
m_iTuSo;
int
int
m_iMauSo;
m_iMauSo;
};
};
void main()
void main()
{
{
PhanSo p1;
PhanSo p1;
}
}
7
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Hàm dựng
Hàm dựng

Hàm dựng sao chép (copy constructor):
Hàm dựng sao chép (copy constructor):

Có tham số là đối tượng cùng lớp.
Có tham số là đối tượng cùng lớp.

Dùng khởi tạo từ đối tượng cùng loại.
Dùng khởi tạo từ đối tượng cùng loại.


Lớp không có hàm dựng sao chép?
Lớp không có hàm dựng sao chép?




Trình biên dịch cung cấp.
Trình biên dịch cung cấp.
class PhanSo
class PhanSo
{
{
private:
private:
int
int
m_iTuSo;
m_iTuSo;
int
int
m_iMauSo;
m_iMauSo;
public:
public:
PhanSo(const PhanSo &p);
PhanSo(const PhanSo &p);
};
};
void main()

void main()
{
{
PhanSo p1(1, 2);
PhanSo p1(1, 2);
PhanSo p2(p1);
PhanSo p2(p1);
PhanSo p3 = p2;
PhanSo p3 = p2;
}
}
8
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Hàm dựng
Hàm dựng

Dr. Guru khuyên:
Dr. Guru khuyên:

Một lớp nên có tối thiểu 3 hàm dựng sau:
Một lớp nên có tối thiểu 3 hàm dựng sau:

Hàm dựng mặc định.
Hàm dựng mặc định.

Hàm dựng có đầy đủ tham số.
Hàm dựng có đầy đủ tham số.

Hàm dựng sao chép.

Hàm dựng sao chép.
class PhanSo
class PhanSo
{ private:
{ private:
int
int
m_iTuSo;
m_iTuSo;
int
int
m_iMauSo;
m_iMauSo;
public:
public:
PhanSo();
PhanSo();
PhanSo(int iTuSo, int iMauSo);
PhanSo(int iTuSo, int iMauSo);
PhanSo(const PhanSo &p);
PhanSo(const PhanSo &p);
};
};
9
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Nội dung
Nội dung

Hàm dựng.

Hàm dựng.

Hàm hủy.
Hàm hủy.

Hàm toán tử.
Hàm toán tử.

Bài tập.
Bài tập.
10
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Hàm hủy
Hàm hủy

Vấn đề rò rỉ bộ nhớ (memory leak):
Vấn đề rò rỉ bộ nhớ (memory leak):

Khi hoạt động, đối tượng có cấp phát bộ nhớ.
Khi hoạt động, đối tượng có cấp phát bộ nhớ.

Khi hủy đi, bộ nhớ có được thu hồi?
Khi hủy đi, bộ nhớ có được thu hồi?

Làm cách nào để thu hồi?
Làm cách nào để thu hồi?

Xây dựng phương thức thu hồi.
Xây dựng phương thức thu hồi.


Người dùng quên gọi?!
Người dùng quên gọi?!
HocSinh

Họ tên

Điểm văn

Điểm toán

Thu hồi
HocSinh

Họ tên

Điểm văn

Điểm toán

Thu hồi
Rò rỉ bộ nhớ!!
Rò rỉ bộ nhớ!!
Hàm hủy vào cuộc!!
Hàm hủy vào cuộc!!
11
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Hàm hủy
Hàm hủy


Tính chất hàm hủy (destructor):
Tính chất hàm hủy (destructor):

Tự động thực hiện khi đối tượng bị hủy.
Tự động thực hiện khi đối tượng bị hủy.

Mỗi lớp có duy nhất một hàm hủy.
Mỗi lớp có duy nhất một hàm hủy.

Trong C++, hàm hủy có tên
Trong C++, hàm hủy có tên
~<Tên lớp>
~<Tên lớp>
class HocSinh
class HocSinh
{
{
private:
private:
char
char
*m_sHoTen;
*m_sHoTen;
float
float
m_fDiemVan;
m_fDiemVan;
float
float

m_fDiemToan;
m_fDiemToan;
public:
public:
~HocSinh() { delete m_sHoTen; }
~HocSinh() { delete m_sHoTen; }
};
};
void main()
void main()
{
{
HocSinh h;
HocSinh h;
HocSinh *p = new HocSinh;
HocSinh *p = new HocSinh;
delete p;
delete p;
}
}
12
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Nội dung
Nội dung

Hàm dựng.
Hàm dựng.

Hàm hủy.

Hàm hủy.

Hàm toán tử.
Hàm toán tử.

Bài tập.
Bài tập.
13
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Hàm toán tử
Hàm toán tử

Khái niệm hàm toán tử:
Khái niệm hàm toán tử:

Có thể dùng toán tử đặt tên hàm?
Có thể dùng toán tử đặt tên hàm?

Trong C++, dùng từ khóa operator.
Trong C++, dùng từ khóa operator.
PhanSo
PhanSo


operator +
operator +
(
(
const PhanSo &p1, const PhanSo &p2

const PhanSo &p1, const PhanSo &p2
);
);

Hệ quả?
Hệ quả?

Định nghĩa lại cách thực hiện toán tử.
Định nghĩa lại cách thực hiện toán tử.
PhanSo p1, p2;
PhanSo p1, p2;
PhanSo p3 = p1 + p2;
PhanSo p3 = p1 + p2;

Định nghĩa nhiều cách thực hiện khác nhau cho toán tử
Định nghĩa nhiều cách thực hiện khác nhau cho toán tử
bằng nạp chồng hàm.
bằng nạp chồng hàm.
PhanSo
PhanSo


operator +
operator +
(
(
const PhanSo &p, int iNumber
const PhanSo &p, int iNumber
);
);

float
float


opeartor +
opeartor +
(
(
const PhanSo &p, float iNumber
const PhanSo &p, float iNumber
);
);
14
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Hàm toán tử
Hàm toán tử

Ưu điểm:
Ưu điểm:

Thực hiện toán tử trên kiểu dữ liệu tự định nghĩa.
Thực hiện toán tử trên kiểu dữ liệu tự định nghĩa.
PhanSo p1, p2;
PhanSo p1, p2;
HocSinh h1, h2;
HocSinh h1, h2;
PhanSo p3 = p1 + p2;
PhanSo p3 = p1 + p2;
if (h1 > h2)

if (h1 > h2)




h1++;
h1++;

Hạn chế:
Hạn chế:

Không thể tạo toán tử mới.
Không thể tạo toán tử mới.

Không thể định nghĩa lại toán tử trên kiểu cơ bản.
Không thể định nghĩa lại toán tử trên kiểu cơ bản.

Ngôi của toán tử giữ nguyên.
Ngôi của toán tử giữ nguyên.

Độ ưu tiên của toán tử không đổi.
Độ ưu tiên của toán tử không đổi.

Đôi khi gây nhầm lẫn!!
Đôi khi gây nhầm lẫn!!
15
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Hàm toán tử
Hàm toán tử


Phân loại hàm toán tử:
Phân loại hàm toán tử:

Toán tử độc lập:
Toán tử độc lập:

Không thuộc lớp nào.
Không thuộc lớp nào.

Ngôi của toán tử là số tham số truyền vào.
Ngôi của toán tử là số tham số truyền vào.
PhanSo
PhanSo


operator +
operator +
(
(
const PhanSo &p1, const PhanSo &p2
const PhanSo &p1, const PhanSo &p2
);
);
bool
bool


operator >
operator >

(
(
const PhanSo &p1, const PhanSo &p2
const PhanSo &p1, const PhanSo &p2
);
);

Toán tử thuộc lớp:
Toán tử thuộc lớp:

Là phương thức của lớp.
Là phương thức của lớp.

Ngôi của toán tử: đối tượng của lớp + số tham số.
Ngôi của toán tử: đối tượng của lớp + số tham số.
PhanSo
PhanSo


PhanSo::operator +
PhanSo::operator +
(
(
const PhanSo &p
const PhanSo &p
);
);
bool
bool



PhanSo::operator >
PhanSo::operator >
(
(
const PhanSo &p
const PhanSo &p
);
);

Cách sử dụng 2 loại là như nhau!!
Cách sử dụng 2 loại là như nhau!!
16
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Hàm toán tử
Hàm toán tử

Toán tử có thể định nghĩa lại:
Toán tử có thể định nghĩa lại:
Ngôi
Ngôi
Nhóm
Nhóm
Toán tử
Toán tử
1 Ngôi (Unary)
1 Ngôi (Unary)
Tăng giảm
Tăng giảm

++,
++,
Dấu số học
Dấu số học
+, -
+, -
Logic
Logic
!, ~
!, ~
Con trỏ
Con trỏ
*, &
*, &
Ép kiểu
Ép kiểu
int, float, double, …
int, float, double, …
2 Ngôi (Binary)
2 Ngôi (Binary)
Số học
Số học
+, -, *, /, %, +=, -=, *=, /=, %=
+, -, *, /, %, +=, -=, *=, /=, %=
So sánh
So sánh
>, <, ==, >=, <=, !=
>, <, ==, >=, <=, !=
Logic
Logic

&&, ||, &, |
&&, ||, &, |
Nhập xuất
Nhập xuất
<<, >>
<<, >>
Gán
Gán
=
=
Lấy chỉ số mảng
Lấy chỉ số mảng
[ ]
[ ]
17
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Hàm toán tử
Hàm toán tử

Toán tử không thể định nghĩa lại:
Toán tử không thể định nghĩa lại:
Toán tử
Toán tử
Ý nghĩa
Ý nghĩa
.
.
Truy xuất phần tử
Truy xuất phần tử

.*
.*
Truy xuất con trỏ phần tử
Truy xuất con trỏ phần tử
::
::
Toán tử ::
Toán tử ::
? :
? :
Toán tử điều kiện
Toán tử điều kiện
#
#
Chỉ thị tiền xử lý
Chỉ thị tiền xử lý
# #
# #
Chỉ thị tiền xử lý
Chỉ thị tiền xử lý
18
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Hàm toán tử
Hàm toán tử

Dr. Guru khuyên:
Dr. Guru khuyên:

Những lưu ý khi định nghĩa lại toán tử:

Những lưu ý khi định nghĩa lại toán tử:

Ngôi: số lượng tham số.
Ngôi: số lượng tham số.

Toán hạng: kiểu dữ liệu tham số.
Toán hạng: kiểu dữ liệu tham số.

Kết quả: kiểu trả về.
Kết quả: kiểu trả về.

Ví dụ:
Ví dụ:

Toán tử >.
Toán tử >.

Toán tử =.
Toán tử =.

Toán tử [ ].
Toán tử [ ].
19
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Tóm tắt
Tóm tắt

Hàm dựng:
Hàm dựng:


Khởi tạo thông tin ban đầu cho đối tượng.
Khởi tạo thông tin ban đầu cho đối tượng.

Tự động thực hiện khi đối tượng được tạo lập.
Tự động thực hiện khi đối tượng được tạo lập.

Mỗi lớp có thể có nhiều hàm dựng.
Mỗi lớp có thể có nhiều hàm dựng.

Hàm hủy:
Hàm hủy:

Dọn dẹp bộ nhớ cho đối tượng.
Dọn dẹp bộ nhớ cho đối tượng.

Tự động thực hiện khi đối tượng bị hủy.
Tự động thực hiện khi đối tượng bị hủy.

Mỗi lớp có duy nhất một hàm hủy.
Mỗi lớp có duy nhất một hàm hủy.
20
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Tóm tắt
Tóm tắt

Hàm toán tử:
Hàm toán tử:


Hàm có tên là toán tử.
Hàm có tên là toán tử.

Dùng định nghĩa lại toán tử.
Dùng định nghĩa lại toán tử.

Ràng buộc:
Ràng buộc:

Ngôi của toán tử giữ nguyên.
Ngôi của toán tử giữ nguyên.

Độ ưu tiên của toán tử không đổi.
Độ ưu tiên của toán tử không đổi.

Không thể tạo toán tử mới.
Không thể tạo toán tử mới.

Không thể định nghĩa lại toán tử cho kiểu cơ bản.
Không thể định nghĩa lại toán tử cho kiểu cơ bản.

Có 2 loại hàm toán tử:
Có 2 loại hàm toán tử:

Toán tử độc lập.
Toán tử độc lập.

Toán tử thuộc lớp.
Toán tử thuộc lớp.
21

Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Nội dung
Nội dung

Hàm dựng.
Hàm dựng.

Hàm hủy.
Hàm hủy.

Hàm toán tử.
Hàm toán tử.

Bài tập.
Bài tập.
22
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Bài tập
Bài tập

Bài tập 3.1:
Bài tập 3.1:
Bổ sung vào lớp
Bổ sung vào lớp
phân số
phân số
những phương thức sau:
những phương thức sau:

(Nhóm tạo hủy)
(Nhóm tạo hủy)

Khởi tạo mặc định phân số = 0.
Khởi tạo mặc định phân số = 0.

Khởi tạo với tử và mẫu cho trước.
Khởi tạo với tử và mẫu cho trước.

Khởi tạo với giá trị phân số cho trước.
Khởi tạo với giá trị phân số cho trước.

Khởi tạo từ một phân số khác.
Khởi tạo từ một phân số khác.
(Nhóm toán tử)
(Nhóm toán tử)

Toán tử số học: +, -, *, /, =, +=, -=.
Toán tử số học: +, -, *, /, =, +=, -=.

Toán tử so sánh: >, <, ==, >=, <=, !=.
Toán tử so sánh: >, <, ==, >=, <=, !=.

Toán tử một ngôi: ++,
Toán tử một ngôi: ++,

Toán tử ép kiểu: (float), (int).
Toán tử ép kiểu: (float), (int).

Toán tử nhập, xuất: >>, <<.

Toán tử nhập, xuất: >>, <<.
23
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Bài tập
Bài tập

Bài tập 3.2:
Bài tập 3.2:
Bổ sung vào lớp
Bổ sung vào lớp
số phức
số phức
những phương thức sau:
những phương thức sau:
(Nhóm tạo hủy)
(Nhóm tạo hủy)

Khởi tạo mặc định số phức = 0.
Khởi tạo mặc định số phức = 0.

Khởi tạo với phần thực và phần ảo cho trước.
Khởi tạo với phần thực và phần ảo cho trước.

Khởi tạo với giá trị thực cho trước.
Khởi tạo với giá trị thực cho trước.

Khởi tạo từ một số phức khác.
Khởi tạo từ một số phức khác.
(Nhóm toán tử)

(Nhóm toán tử)

Toán tử số học: +, -, *, /, =, +=, -=.
Toán tử số học: +, -, *, /, =, +=, -=.

Toán tử so sánh: >, <, ==, >=, <=, !=.
Toán tử so sánh: >, <, ==, >=, <=, !=.

Toán tử một ngôi: ++,
Toán tử một ngôi: ++,

Toán tử ép kiểu: (float), (int).
Toán tử ép kiểu: (float), (int).

Toán tử nhập, xuất: >>, <<.
Toán tử nhập, xuất: >>, <<.
24
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Bài tập
Bài tập

Bài tập 3.3:
Bài tập 3.3:
Bổ sung vào lớp
Bổ sung vào lớp
đơn thức
đơn thức
những phương thức sau:
những phương thức sau:

(Nhóm tạo hủy)
(Nhóm tạo hủy)

Khởi tạo mặc định đơn thức = 0.
Khởi tạo mặc định đơn thức = 0.

Khởi tạo với hệ số và số mũ cho trước.
Khởi tạo với hệ số và số mũ cho trước.

Khởi tạo với hệ số cho trước, số mũ = 0.
Khởi tạo với hệ số cho trước, số mũ = 0.

Khởi tạo từ một đơn thức khác.
Khởi tạo từ một đơn thức khác.
(Nhóm toán tử)
(Nhóm toán tử)

Toán tử số học: +, -, *, /, =, +=, -=.
Toán tử số học: +, -, *, /, =, +=, -=.

Toán tử so sánh: >, <, ==, >=, <=, !=.
Toán tử so sánh: >, <, ==, >=, <=, !=.

Toán tử một ngôi: ++,
Toán tử một ngôi: ++,

Toán tử ép kiểu: (float), (int).
Toán tử ép kiểu: (float), (int).

Toán tử nhập, xuất: >>, <<.

Toán tử nhập, xuất: >>, <<.
25
Phương pháp lập trình hướng đối tượng – GV. Nguyễn
Minh Huy
Bài tập
Bài tập

Bài tập 3.4:
Bài tập 3.4:
Bổ sung vào lớp
Bổ sung vào lớp
học sinh
học sinh
những phương thức sau:
những phương thức sau:
(Nhóm tạo hủy)
(Nhóm tạo hủy)

Khởi tạo với họ tên và điểm văn, toán cho trước.
Khởi tạo với họ tên và điểm văn, toán cho trước.

Khởi tạo với họ tên cho trước, điểm văn, toán = 0.
Khởi tạo với họ tên cho trước, điểm văn, toán = 0.

Khởi tạo từ một học sinh khác.
Khởi tạo từ một học sinh khác.
(Nhóm toán tử)
(Nhóm toán tử)

Toán tử gán: =.

Toán tử gán: =.

Toán tử so sánh (ĐTB): >, <, ==, >=, <=, !=.
Toán tử so sánh (ĐTB): >, <, ==, >=, <=, !=.

Toán tử nhập, xuất: >>, <<.
Toán tử nhập, xuất: >>, <<.

×