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

Lập trình hướng đối tượng - Chương 4 pps

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 (1.41 MB, 60 trang )

Lập trình hướng đối tượng – Đa hình
1
Chương 4
ĐA HÌNH
Lập trình hướng đối tượng – Đa hình 2
Nội dung chính

Các đ c đi m quan tr ng c a LTHĐTặ ể ọ ủ

Gi i thi uớ ệ

Các ví dụ

Ph ng th c oươ ứ ả

Đa hình

Destructor oả

L p c s tr u t ngớ ơ ở ừ ượ
Lập trình hướng đối tượng – Đa hình 3
Tài liệu đọc
Lập trình hướng đối tượng – Đa hình 4
Lập trình hướng đối tượng – Đa hình 5
Lập trình hướng đối tượng – Đa hình 6
Ví dụ 1
class Base
{
public:
void show( )
{


cout << “Base \n”;
}
};
class Derv1 : public Base
{
public:
void show( )
{
cout << “Derv 1 \n”;
}
};
Lập trình hướng đối tượng – Đa hình 7
Ví dụ 1 (tt)
void main( )
{
Derv1 d1;
Derv2 d2;
Base *bp;
bp = &d1; bp → show( );
bp = &d2; bp → show( );
}
class Derv2 : public Base
{
public:
void show( )
{
cout << “Derv 2 \n”;
}
};
Lập trình hướng đối tượng – Đa hình 8

Ví dụ 2
class Teacher
{
string name;
int numOfStudents;
public:
Teacher(const string & new_name,int nos)
{
name=new_name;
numOfStudents=nos;
}
void print() const;
};
Lập trình hướng đối tượng – Đa hình 9
Ví dụ 2 (tt)
void Teacher::print() const
{
cout << "Name: "<< name << endl;
cout << " Num of Students:"<< numOfStudents << endl;
}
class Principal : public Teacher
{
string SchoolName;
public:
Principal(const string & new_name,int nos, const string & sn)
:Teacher(new_name,nos)
{
SchoolName=sn;
}
void print() const;

};
void Principal::print() const
{
Teacher::print();
cout << " Name of School:"<< SchoolName << endl;
}
Lập trình hướng đối tượng – Đa hình 10
Ví dụ 2 (tt)
int main()
{
Teacher t1("Teacher 1",50);
Principal p1("Principal 1",40,"School");
Teacher *ptr;
char c;
cout << "Teacher or Principal "; cin >> c;
if (c=='t') ptr=&t1;
else ptr=&p1;
ptr->print(); // which print?
return 0;
}
Lập trình hướng đối tượng – Đa hình 11
Ví dụ 3
Lập trình hướng đối tượng – Đa hình 12
Ví dụ 3 (tt)
Lập trình hướng đối tượng – Đa hình 13
Ví dụ 3 (tt)
Lập trình hướng đối tượng – Đa hình 14
Ví dụ 3 (tt)
Lập trình hướng đối tượng – Đa hình 15
Ràng buộc/Liên kết


Ràng bu c/Liên k tộ ế

Sự xác định phương thức nào trong một phân cấp
lớp được gọi với một đối tượng cụ thể

Ràng bu c tĩnh/s mộ ớ

Chương trình dịch có thể xác định được phương
thức nào được gọi trong một phân cấp lớp với một
đối tượng cụ thể

Ràng bu c đ ng/trộ ộ ễ

Sự xác định phương thức nào trong một phân cấp
lớp được sử dụng với một đối tượng cụ thể xảy ra
trong thời điểm thực thi chương trình
Lập trình hướng đối tượng – Đa hình 16
Giải thích kết quả của các ví dụ

Ví d 1ụ

pb là con trỏ trỏ đến đối tượng thuộc lớp cơ
sở Base (Base *pb)

Ví d 2ụ

ptr là con trỏ trỏ đến đối tượng thuộc lớp cơ
sở Teacher (Teacher *ptr)


Ví d 3ụ

ani là con trỏ trỏ đến đối tượng thuộc lớp cơ
sở Animal (Animal *ani)
Lập trình hướng đối tượng – Đa hình 17
Giải thích kết quả của các ví dụ (tt)

Ví d 1ụ

pb=&d1; pb=&d2;

pb vẫn là trỏ đến đối tượng thuộc lớp Base (không
quan tâm đến nội dung)

Ví d 2ụ

Tương tự ptr vẫn là trỏ đến đối tượng thuộc lớp
Teacher

Ví d 3ụ

Tương tự ani vẫn là trỏ đến đối tượng thuộc lớp
Animal

Lý do

Ràng buộc tĩnh/sớm
Lập trình hướng đối tượng – Đa hình 18
Giải pháp: Ràng buộc động


Ch ng trình d ch không th xác đ nh đ c s ràng bu c c a ươ ị ể ị ượ ự ộ ủ
đ i t ng và ph ng th cố ượ ươ ứ

Ràng bu c này ch đ c xác đ nh m t cách đ ng t i th i đi m ộ ỉ ượ ị ộ ộ ạ ờ ể
th c thi ch ng trìnhự ươ

Đ xác đ nh m t ph ng th c b ràng bu c đ ng, khai báo ể ị ộ ươ ứ ị ộ ộ ở
ph ng th c c a l p c s ph i dùng t khóa ươ ứ ủ ớ ơ ở ả ừ virtual

Khi m t ph ng th c đ c đ nh nghĩa o, t t c các ph ng ộ ươ ứ ượ ị ả ấ ả ươ
th c ph i n p ch ng t đi m này xu ng phân c p l p cho dù ứ ả ạ ồ ừ ể ố ấ ớ
nó có đ c khai báo là t ng minh hay khôngượ ườ
Lập trình hướng đối tượng – Đa hình 19
Các kết quả mới

Ví d 1ụ

virtual void show( );

Kết quả:

Derv 1

Derv 2

Ví d 2ụ

virtual void print() const;

Kết quả:




Name of School: School

Ví d 3ụ

virtual void Speak()

Kết quả:

My name is Tony, go go !

My name is fluffy, meoo !
Lập trình hướng đối tượng – Đa hình 20
Phương thức ảo

Gi s l p c s Base có ph ng th c o ả ử ớ ơ ở ươ ứ ả method và
các l p d n xu t c a Base n p ch ng ph ng th c ớ ẫ ấ ủ ạ ồ ươ ứ
này. Khi ta g i ọ method thông qua m t con tr hay tham ộ ỏ
chi u p có ki u Base thì ph ng th c ế ể ươ ứ method đ c ượ
g i s là ph ng th c c a đ i t ng mà p đang tr ọ ẽ ươ ứ ủ ố ượ ỏ
đ nế

Chú ý: G i ph ng th c ọ ươ ứ method trên m t đ i t ng ộ ố ượ
ki u Base s không có hi u qu nh đã nói trênể ẽ ệ ả ư ở
Lập trình hướng đối tượng – Đa hình 21
Đa hình
Ví d : Drawing toolụ
Rectangle Triangle

Ellipse
Lập trình hướng đối tượng – Đa hình 22
Chúng ta muốn chúng làm gì ?
Shape* shapes[10]
t chúng vào m t thùng ch a t ng quát và …Đặ ộ ứ ổ
Rectangle Triangle
Ellipse
Lập trình hướng đối tượng – Đa hình 23
Chúng ta muốn chúng làm gì ?
Shape*
shapes[10]
i u ki n chúng b ng cách g i cùng m t thông i pĐ ề ể ằ ử ộ đ ệ
“draw”
CharScreen s(20,10);
for (i = 0; i < numShapes; i++) {
shapes[i]->draw(s);
}
“draw”
“draw”
Lập trình hướng đối tượng – Đa hình 24
Chúng ta muốn chúng làm gì ?
Shape*
shapes[10]
Nh ng, làm sao ư để draw() m i i t ng theo các ỗ đố ượ
cách khác nhau
“draw”
void Rectangle::draw() {
// draw a rectangle
}
void Triangle::draw() {

// draw a triangle
}
void Ellipse::draw() {
// draw an ellipse
}
“draw”
“draw”
Lập trình hướng đối tượng – Đa hình 25
Đa hình (tt)

Do v y, m c dù tên c a thông đi p là ậ ặ ủ ệ
gi ng nhau (nh draw()) nh ng các đ i ố ư ư ố
t ng nh n thông đi p s đáp ng theo ượ ậ ệ ẽ ứ
các cách khác theo ki u đ i t ng c a nóể ố ượ ủ

(như Rectangle::draw(), Triangle::draw(), Ellipse::draw()).

Đi u này g i là đa hìnhề ọ

×