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

lap trinh C bai so 6

19 7 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

phương thức này, thì phương thức của lớp dẫn xuất sẽ ẩn tất cả các phương thức của lớp cơ sở có cùng tên với nó... Chồng toán tử[r]

(1)(2)

Nội dung chính

 Đa hình đặc trưng ngơn ngữ

lập trình hướng đối tượng

 Đa hình tĩnh

 Chồng hàm

 Chồng toán tử

 Đa hình động

(3)

1 Chồng hàm

 Là kỹ thuật sử dụng:

 Các hàm tên

 Danh sách tham số khác

 Danh sách tham số phân biệt theo:

 kiểu liệu tham số  thứ tự tham số

 số lượng tham số

(4)(5)

Overriding function

 Overload phương thức, tức tạo

ra nhiều phương thức có tên

nhưng khác danh sách tham số

 Override phương thức, tức tạo

một phương thức lớp dẫn xuất có prototype với phương thức

(6)

Ví dụ: Overriding function

class Mammal {

public:

void Speak() {cout << “Mamal”;} };

class Dog : public Mammal {

public:

void Speak() {cout << “Dog”;} };

int main() {

Mamal m; Dog d;

m.Speak(); // Mamal

d.Speak(); // Dog

(7)

Ẩn phương thức lớp sở

 Nếu lớp sở có phương thức bị

chồng lớp dẫn xuất lại override

(8)

Ví dụ: Ẩn phương thức lớp sở

class Mammal {

public:

void Move() {cout << “Mamal moves step”;}

void Move(int d) {cout << “Mamal moves <<d<<“ steps”;} };

class Dog : public Mammal {

public:

void Move() {cout << “Dog moves step”;} }; int main() { Mamal m; Dog d; m.Move(); m.Move(10); d.Move();

d.Move(10); // lỗi

(9)

2 Chồng toán tử

 Chồng toán tử cho phép thực

phép tính kiểu liệu người sử dụng tự định nghĩa

tương tự kiểu liệu khác

 Cú pháp khai báo chồng toán tử:

(10)

2.1 Chồng toán tử toán hạng

 Hàm chồng toán tử tốn hạng

khơng có tham số

 Ví dụ: chồng tốn tử ++ (tiền tố

(11)(12)

2.2 Chồng toán tử toán hạng

 Hàm chồng toán tử hai tốn hạng có

một tham số

 Tham số tốn hạng phía bên

phải toán tử

 Hàm chồng toán tử viện dẫn

(13)(14)

2.3 Chồng toán tử quan hệ

class Date {

bool operator==(Date d) {

return (day==d.day) && (month==d.month) && (year==d.year); };

bool operator<(Date d) {

if (year < d.year) return true; else

if (year==d.year) && (month < d.month) return true;

else

(15)

3 Hàm ảo

 Khi hàm định nghĩa hàm ảo lớp

sở định nghĩa lại lớp dẫn xuất

 Khi sử dụng hàm ảo?

 Lớp Parent Child có phương thức f

 Khai báo trỏ thuộc kiểu lớp Parent

 Parent* p;

 Con trỏ trỏ đến đối tượng lớp Child

 p = new Child;

 Sau đó, thực lời gọi

 p->f;

(16)

Ví dụ: Không sử dụng hàm ảo class Mammal

{

public:

void Move() {cout << “Mammal moves step”;} };

class Dog : public Mammal {

public:

void Move() {cout << “Dog moves step”;} };

int main() {

Mamal* p = new Dog();

(17)

Ví dụ: Sử dụng hàm ảo

class Mammal {

public:

void virtual Move() {cout << “Mammal moves step”;} };

class Dog : public Mammal {

public:

void Move() {cout << “Dog moves step”;} };

int main() {

(18)

Hàm ảo

 Lớp sở trừu tượng lớp sở

đối tượng sử dụng lớp khác kế thừa

 Hàm ảo khai báo lớp làm

cho lớp trở thành lớp sở trừu tượng

virtual kiểu_trả_về tên_hàm(danh sách tham số) = 0;

 Tất lớp dẫn xuất phải định nghĩa

(19)

Ví dụ: hàm ảo class Mammal

{

public:

virtual void Move() = 0; };

class Dog : public Mammal {

public:

void Move() {cout << "Dog moves step";} };

void main() {

Ngày đăng: 30/04/2021, 04:16

Xem thêm:

w