1. Trang chủ
  2. » Trung học cơ sở - phổ thông

lap trinh huong doi tuong

22 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

 Lớp có chứa hàm thuần ảo Lớp có chứa hàm thuần ảo   lớp trừu tượng lớp trừu tượng  Lớp trừu tượng chỉ dùng để kế thừa. Lớp trừu tượng chỉ dùng để kế thừa[r]

(1)

Đa hình

(2)

Nội dung

Nội dung  Hàm ảo.Hàm ảo.

(3)

Nội dung

Nội dung  Hàm ảo.Hàm ảo.

(4)

Hàm ảo

Hàm ảo

 Con trỏ đối tượng kế thừa:Con trỏ đối tượng kế thừa:

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

 Truy xuất đối tượng kế thừa trỏ lớp sở.Truy xuất đối tượng kế thừa trỏ lớp sở.  Kiểu trỏ định phương thức gọiKiểu trỏ định phương thức gọi

liên kết tĩnh.liên kết tĩnh.

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

Đối tượng kế thừa đóng vai trị đối tượng sở.Đối tượng kế thừa đóng vai trị đối tượng sở.

A obj;

A *p;

p = &obj; p = new A; 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 B obj;

A *p = &obj; p->func();

// B kế thừa A void func(A obj) { } B obj;

func(obj);

// B kế thừa A void func(A obj) { } B obj;

(5)

Hàm ảo

Hàm ảo

Animal +Talk()

Cat +Talk()

Dog +Talk()  Ví dụ:Ví dụ:

class Animal class Animal {

{

public: public:

void talk() { cout << “Don’t talk!”; } void talk() { cout << “Don’t talk!”; } };

};

class Cat: public Animal class Cat: public Animal {

{

public: public:

void talk() { cout << “Meo meo!”; } void talk() { cout << “Meo meo!”; } };

};

class Dog: public Animal class Dog: public Animal {

{

public: public:

void talk() { cout << “Gau gau!”; } void talk() { cout << “Gau gau!”; } };

(6)

Hàm ảo Hàm ảo void main() void main() { { Animal Animal a;a; Cat

Cat c;c; Dog

Dog d;d; Animal

Animal *p;*p; p = &a;

p = &a;

p->talk();

p->talk();

p = &c; p = &c;

p->talk();

p->talk();

p = &d; p = &d;

p->talk(); p->talk(); } } Animal talks!! Animal talks!! Animal talks!! Animal talks!! Animal talks!! Animal talks!! Animal talks!! Animal talks!! Animal talks!! Animal talks!!

 Ví dụ:Ví dụ:

void giveATalk(Animal *p) void giveATalk(Animal *p) { { p->talk(); p->talk(); } } void main() void main() { { Cat

Cat c;c; Dog

Dog d;d;

(7)

Hàm ảo

Hàm ảo

 Khái niệm hàm ảo:Khái niệm hàm ảo:

 Một phương thức lớp.Một phương thức lớp.  Mang tính ảo.Mang tính ảo.

 Chuyển lời gọi hàm cho đối tượng trỏ Chuyển lời gọi hàm cho đối tượng trỏ

đang trỏ đến.

đang trỏ đến. 

 Liên kết động.Liên kết động.

 Chỉ có ý nghĩa gọi thơng qua trỏ.Chỉ có ý nghĩa gọi thơng qua trỏ.  Khai báo hàm ảo C++:Khai báo hàm ảo C++:

virtual

(8)

Hàm ảo

Hàm ảo

Animal +virtual Talk()

Cat +Talk()

Dog +Talk()  Ví dụ:Ví dụ:

class Animal class Animal {

{

public: public:

virtual

virtual void talk() { cout << “Don’t talk!”; } void talk() { cout << “Don’t talk!”; } };

};

class Cat: public Animal class Cat: public Animal {

{

public: public:

void talk() { cout << “Meo meo!”; } void talk() { cout << “Meo meo!”; } };

};

class Dog: public Animal class Dog: public Animal {

{

public: public:

void talk() { cout << “Gau gau!”; } void talk() { cout << “Gau gau!”; } };

(9)

Hàm ảo Hàm ảo void main() void main() { { Animal Animal a;a; Cat

Cat c;c; Dog

Dog d;d; Animal

Animal *p;*p; p = &a;

p = &a;

p->Talk();

p->Talk();

p = &c; p = &c;

p->Talk();

p->Talk();

p = &d; p = &d;

p->Talk(); p->Talk(); } } Cat talks!! Cat talks!! Dog talks!! Dog talks!! Animal talks!! Animal talks!! Cat talks!! Cat talks!! Dog talks!! Dog talks!!

 Ví dụ:Ví dụ:

void giveATalk(Animal *p) void giveATalk(Animal *p) { { p->talk(); p->talk(); } } void main() void main() { { Cat

Cat c;c; Dog

Dog d;d;

(10)

Hàm ảo

Hàm ảo

 Sử dụng hàm ảo để làm gì?Sử dụng hàm ảo để làm gì?

 Gọn gàng, đơn giản, uyển chuyển, linh động.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.Chương trình có tính dễ mở rộng, nâng cấp.

void giveATalk(Animal *p) void giveATalk(Animal *p) { { p->talk(); p->talk(); } }

void giveATalk(Animal obj, int iType) void giveATalk(Animal obj, int iType) {

{

if (iType == 0) if (iType == 0) {

{

Cat c = (Cat)obj; Cat c = (Cat)obj; c.talk();

c.talk(); }

}

else if (iType == 1) else if (iType == 1) {

{

(11)

Nội dung

Nội dung  Hàm ảo.Hàm ảo.

Hàm ảo.Hàm ảo.  Hàm hủy ảo.Hàm hủy ảo.

(12)

Hàm ảo

Hàm ảo

 Có số hàm ảo khơng thể cài đặt Có số hàm ảo khơng thể cài đặt

khơng có ý nghĩa cài đặt lớp sở. khơng có ý nghĩa cài đặt lớp sở.

class Animal class Animal {

{

public: public:

virtual void talk() { cout << “Don’t talk!”; } virtual void talk() { cout << “Don’t talk!”; } };

};

(13)

Hàm ảo

Hàm ảo

 Khái niệm hàm ảo:Khái niệm hàm ảo:

 Hàm ảo có khai báo mà khơng có cài đặt.Hàm ảo có khai báo mà khơng có cài đặt.  Phần cài đặt lớp kế thừa đảm nhận.Phần cài đặt lớp kế thừa đảm nhận.

 Khai báo C++:Khai báo C++: virtual

virtual <Chữ ký hàm> <Chữ ký hàm> = 0= 0;;

 Lớp trừu tượng (abstract class):Lớp trừu tượng (abstract class):

 Lớp chứa hàm ảo.Lớp chứa hàm ảo.

(14)

Hàm ảo

Hàm ảo

void main() void main() {

{

Animal a;

Animal a; // Sai // Sai Animal *p = new Animal; // Sai Animal *p = new Animal; // Sai Animal *q = new Cat; // Đúng Animal *q = new Cat; // Đúng q->talk();

q->talk(); }

}

 Ví dụ:Ví dụ:

class Animal class Animal { { public: public:

virtual void talk() = 0; virtual void talk() = 0;

}; };

class Cat: public Animal class Cat: public Animal {

{

public: public:

void talk() { cout << “Meo meo!”; } void talk() { cout << “Meo meo!”; } };

};

class Dog: public Animal class Dog: public Animal {

{

public: public:

void talk() { cout << “Gau gau!”; } void talk() { cout << “Gau gau!”; } };

};

Cat talks!!

(15)

Nội dung

Nội dung  Hàm ảo.Hàm ảo.

(16)

Hàm hủy ảo

Hàm hủy ảo

void main() void main() {

{

GiaoVien *p1 = new GiaoVien; GiaoVien *p1 = new GiaoVien; delete p1;

delete p1; GVCN

GVCN *p2 = new GVCN; *p2 = new GVCN; delete p2;

delete p2;

GiaoVien *p3 = new GVCN; GiaoVien *p3 = new GVCN; delete p3;

delete p3; }

}

 Ví dụ:Ví dụ:

class GiaoVien class GiaoVien { { private: private: char

char *m_strHoTen;*m_strHoTen; public:

public:

~GiaoVien() { delete m_strHoTen; } ~GiaoVien() { delete m_strHoTen; } };

};

class GVCN : public GiaoVien class GVCN : public GiaoVien {

{

private: private:

char

char *m_strLopCN;*m_strLopCN; public:

public:

(17)

Hàm hủy ảo

Hàm hủy ảo

 Dr Guru khuyên:Dr Guru khuyên:

Hàm hủy lớp phải hàm ảo.Hàm hủy lớp phải hàm ảo.

 Chuyển lời gọi đến hàm hủy lớp kế thừa.Chuyển lời gọi đến hàm hủy lớp kế thừa.

class GiaoVien class GiaoVien {

{

private: private: char

char *m_strHoTen;*m_strHoTen; public:

public:

virtual

virtual ~GiaoVien() { delete m_strHoTen; } ~GiaoVien() { delete m_strHoTen; } };

};

GiaoVien *p3 = new GVCN; GiaoVien *p3 = new GVCN;

delete p3;

delete p3;

~GVCN() ~GiaoVien()

(18)

Tóm tắt

Tóm tắt  Hàm ảo:Hàm ảo:

 Chuyển lời gọi hàm đến đối tượng.Chuyển lời gọi hàm đến đối tượng.  Chỉ có ý nghĩa gọi từ trỏ.Chỉ có ý nghĩa gọi từ trỏ.

 Hàm ảo:Hàm ảo:

 Hàm ảo có khai báo mà khơng có cài đặt.Hàm ảo 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 kế thừa đảm nhận việc cài đặt.

 Lớp có chứa hàm ảo Lớp có chứa hàm ảo  lớp trừu tượng lớp trừu tượng  Lớp trừu tượng dùng để kế thừa.Lớp trừu tượng dùng để kế thừa.

 Hàm hủy ảo:Hàm hủy ảo:

(19)

Nội dung

Nội dung  Hàm ảo.Hàm ảo.

(20)

Bài tập

Bài tập

 Bài tập 12.1:Bài tập 12.1:

class A class A { public: { public:

[yyy]

[yyy] void f1() { cout << “Good morning.\n”; void f1() { cout << “Good morning.\n”; f2();f2(); } }

[zzz]

[zzz] void f2() { cout << “Good afternoon.\n”; } void f2() { cout << “Good afternoon.\n”; } };

};

class B: public A class B: public A { public:

{ public:

void f1() { cout << “Good evening.\n”;

void f1() { cout << “Good evening.\n”; f2();f2(); } } void f2() { cout << “Good night.\n”; }

void f2() { cout << “Good night.\n”; } }; }; void main() void main() { {

A *pObj = new B; A *pObj = new B; pObj->f1();

pObj->f1(); }

}

Cho biết xuất Cho biết xuất hình hình trường hợp:

trường hợp:

(21)

Bài tập

Bài tập

 Bài tập 12.2:Bài tập 12.2:

Có loại hình: Có loại hình:

- Hình tam giác: biểu diễn đỉnh. - Hình tam giác: biểu diễn đỉnh.

- Hình chữ nhật: biểu diễn điểm trái phải. - Hình chữ nhật: biểu diễn điểm trái phải.

Giả sử có sẵn danh sách hình xuất thơng tin hình Giả sử có sẵn danh sách hình xuất thơng tin hình

trong danh sách đó. trong danh sách đó.

Sau đó, giả sử có thêm loại hình hình trịn. Sau đó, giả sử có thêm loại hình hình trịn.

- Hình trịn: biểu diễn tâm bán kính. - Hình trịn: biểu diễn tâm bán kính.

(22)

Bài tập

Bài tập

 Bài tập 12.3:Bài tập 12.3:

Tốc độ chạy động vật cho bảng sau: Tốc độ chạy động vật cho bảng sau:

Viết chương trình cho phép so sánh tốc độ chạy cặp động vật Viết chương trình cho phép so sánh tốc độ chạy cặp động vật

bất kỳ thuộc nhóm trên. bất kỳ thuộc nhóm trên.

Thêm vào ngựa chạy 60km/h, chương trình thay đổi nào? Thêm vào ngựa chạy 60km/h, chương trình thay đổi nào?

Động vật

Động vật Tốc độTốc độ

Báo

Báo 100km/h100km/h Linh dương

Linh dương 80km/h80km/h Sư tử

Sư tử 70km/h70km/h Chó

Chó 60km/h60km/h Người

Ngày đăng: 11/05/2021, 10:40

Xem thêm: