Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình

 Truy xuất đối tượng bằng con trỏ => linh động.

 Truy xuất đối tượng kế thừa bằng con trỏ lớp cơ sở.

 Kiểu con trỏ quyết định phương thức được gọi

 liên kết tĩnh.

 Đối tượng kế thừa truyền vào hàm nhận tham số kiểu cơ sở.

 Đối tượng kế thừa có thể đóng vai trò đối tượng cơ sở.

Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình trang 1

Trang 1

Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình trang 2

Trang 2

Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình trang 3

Trang 3

Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình trang 4

Trang 4

Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình trang 5

Trang 5

Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình trang 6

Trang 6

Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình trang 7

Trang 7

Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình trang 8

Trang 8

Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình trang 9

Trang 9

Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 22 trang Danh Thịnh 08/01/2024 860
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình

Bài giảng Phương pháp lập trình hướng đối tượng - Bài: Đa hình
1Phương pháp lập trình hướng đối tượng. 
Đa hình
2Phương pháp lập trình hướng đối tượng. 
Nội dung
 Hàm ảo.
 Hàm thuần ảo.
 Hàm hủy ảo.
 Bài tập.
3Phương pháp lập trình hướng đối tượng. 
Nội dung
 Hàm ảo.
 Hàm thuần ảo.
 Hàm hủy ảo.
 Bài tập.
4Phương pháp lập trình hướng đối tượng. 
Hàm ảo
 Con trỏ đối tượng trong kế thừa:
 Truy xuất đối tượng bằng con trỏ => linh động.
 Truy xuất đối tượng kế thừa bằng con trỏ lớp cơ sở.
 Kiểu con trỏ quyết định phương thức được gọi
 liên kết tĩnh.
 Đối tượng kế thừa truyền vào hàm nhận tham số kiểu cơ sở.
 Đối tượng kế thừa có thể đóng vai trò đối tượng cơ sở.
A obj;
A *p;
p = &obj;
p = new A;
// B kế thừa A.
B obj;
A *p = &obj;
p->func();
// B kế thừa A.
void func(A obj) { }
B obj;
func(obj);
5Phương pháp lập trình hướng đối tượng. 
Hàm ảo
Animal
+Talk()
Cat
+Talk()
Dog
+Talk()
 Ví dụ:
class Animal
{
public:
void talk() { cout << “Don’t talk!”; }
};
class Cat: public Animal
{
public:
void talk() { cout << “Meo meo!”; }
};
class Dog: public Animal
{
public:
void talk() { cout << “Gau gau!”; }
};
6Phương pháp lập trình hướng đối tượng. 
Hàm ảo
void main()
{
Animal a;
Cat c;
Dog d;
Animal *p;
p = &a;
p->talk();
p = &c;
p->talk();
p = &d;
p->talk();
}
Animal talks!!
Animal talks!!
Animal talks!!
Animal talks!!
Animal talks!!
 Ví dụ:
void giveATalk(Animal *p)
{
p->talk();
}
void main()
{
Cat c;
Dog d;
giveATalk(&c);
giveATalk(&d);
}
7Phương pháp lập trình hướng đối tượng. 
Hàm ảo
 Khái niệm hàm ảo:
 Một phương thức của lớp.
 Mang tính ảo.
 Chuyển lời gọi hàm cho đúng đối tượng con trỏ 
đang trỏ đến.
 Liên kết động.
 Chỉ có ý nghĩa khi gọi thông qua con trỏ.
 Khai báo hàm ảo trong C++:
virtual ;
8Phương pháp lập trình hướng đối tượng. 
Hàm ảo
Animal
+virtual Talk()
Cat
+Talk()
Dog
+Talk()
 Ví dụ:
class Animal
{
public:
virtual void talk() { cout << “Don’t talk!”; }
};
class Cat: public Animal
{
public:
void talk() { cout << “Meo meo!”; }
};
class Dog: public Animal
{
public:
void talk() { cout << “Gau gau!”; }
};
9Phương pháp lập trình hướng đối tượng. 
Hàm ảo
void main()
{
Animal a;
Cat c;
Dog d;
Animal *p;
p = &a;
p->Talk();
p = &c;
p->Talk();
p = &d;
p->Talk();
}
Cat talks!!
Dog talks!!
Animal talks!!
Cat talks!!
Dog talks!!
 Ví dụ:
void giveATalk(Animal *p)
{
p->talk();
}
void main()
{
Cat c;
Dog d;
giveATalk(&c);
giveATalk(&d);
}
10Phương pháp lập trình hướng đối tượng. 
Hàm ảo
 Sử dụng hàm ảo để làm gì?
 Gọn gàng, đơn giản, uyển chuyển, linh động.
 Chương trình có tính dễ mở rộng, nâng cấp.
void giveATalk(Animal *p)
{
p->talk();
}
void giveATalk(Animal obj, int iType)
{
if (iType == 0)
{
Cat c = (Cat)obj;
c.talk();
}
else if (iType == 1)
{
Dog d = (Dog)obj;
d.talk();
}
}
11Phương pháp lập trình hướng đối tượng. 
Nội dung
 Hàm ảo.
 Hàm thuần ảo.
 Hàm hủy ảo.
 Bài tập.
12Phương pháp lập trình hướng đối tượng. 
Hàm thuần ảo
 Có một số hàm ảo không thể cài đặt hoặc 
không có ý nghĩa khi cài đặt trong lớp cơ sở.
class Animal
{
public:
virtual void talk() { cout << “Don’t talk!”; }
};
Biến thành hàm thuần ảo!!
13Phương pháp lập trình hướng đối tượng. 
Hàm thuần ảo
 Khái niệm hàm thuần ảo:
 Hàm ảo chỉ có khai báo mà không có cài đặt.
 Phần cài đặt do lớp kế thừa đảm nhận.
 Khai báo trong C++:
virtual = 0;
 Lớp trừu tượng (abstract class):
 Lớp chứa hàm thuần ảo.
 Không thể tạo đối tượng từ lớp trừu tượng.
 Chỉ dùng để kế thừa.
14Phương pháp lập trình hướng đối tượng. 
Hàm thuần ảo
void main()
{
Animal a; // Sai.
Animal *p = new Animal; // Sai.
Animal *q = new Cat; // Đúng.
q->talk();
}
 Ví dụ:
class Animal
{
public:
virtual void talk() = 0;
};
class Cat: public Animal
{
public:
void talk() { cout << “Meo meo!”; }
};
class Dog: public Animal
{
public:
void talk() { cout << “Gau gau!”; }
};
Cat talks!!
15Phương pháp lập trình hướng đối tượng. 
Nội dung
 Hàm ảo.
 Hàm thuần ảo.
 Hàm hủy ảo.
 Bài tập.
16Phương pháp lập trình hướng đối tượng. 
Hàm hủy ảo
void main()
{
GiaoVien *p1 = new GiaoVien;
delete p1;
GVCN *p2 = new GVCN;
delete p2;
GiaoVien *p3 = new GVCN;
delete p3;
}
 Ví dụ:
class GiaoVien
{
private:
char *m_strHoTen;
public:
~GiaoVien() { delete m_strHoTen; }
};
class GVCN : public GiaoVien
{
private:
char *m_strLopCN;
public:
~GVCN() { delete m_strLopCN; }
};
~GiaoVien()
~GVCN()
~GiaoVien()
~GiaoVien()
17Phương pháp lập trình hướng đối tượng. 
Hàm hủy ảo
 Dr. Guru khuyên:
 Hàm hủy của lớp phải luôn là hàm ảo.
 Chuyển lời gọi đến hàm hủy của lớp kế thừa.
class GiaoVien
{
private:
char *m_strHoTen;
public:
virtual ~GiaoVien() { delete m_strHoTen; }
};
GiaoVien *p3 = new GVCN;
delete p3; ~GVCN()
~GiaoVien()
18Phương pháp lập trình hướng đối tượng. 
Tóm tắt
 Hàm ảo:
 Chuyển lời gọi hàm đến đúng đối tượng.
 Chỉ có ý nghĩa khi gọi từ con trỏ.
 Hàm thuần ảo:
 Hàm ảo chỉ có khai báo mà không có cài đặt.
 Lớp kế thừa đảm nhận việc cài đặt.
 Lớp có chứa hàm thuần ảo lớp trừu tượng
 Lớp trừu tượng chỉ dùng để kế thừa.
 Hàm hủy ảo:
 Hàm hủy phải luôn luôn là hàm ảo.
19Phương pháp lập trình hướng đối tượng. 
Nội dung
 Hàm ảo.
 Hàm thuần ảo.
 Hàm hủy ảo.
 Bài tập.
20Phương pháp lập trình hướng đối tượng. 
Bài tập
 Bài tập 12.1:
class A
{ public:
[yyy] void f1() { cout << “Good morning.\n”; f2(); }
[zzz] void f2() { cout << “Good afternoon.\n”; }
};
class B: public A
{ public:
void f1() { cout << “Good evening.\n”; f2(); }
void f2() { cout << “Good night.\n”; }
};
void main()
{
A *pObj = new B;
pObj->f1();
}
Cho biết những gì xuất hiện
trên màn hình trong các
trường hợp:
a) [yyy] trống, [zzz] trống.
b) [yyy] trống, [zzz] virtual.
c) [yyy] virtual, [zzz] trống.
d) [yyy] virtu

File đính kèm:

  • pdfbai_giang_phuong_phap_lap_trinh_huong_doi_tuong_bai_da_hinh.pdf