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 (82.38 KB, 19 trang )
<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1></div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>
Đa hình là một đặc trưng của ngơn ngữ
lập trình hướng đối tượng.
Đa hình tĩnh
Chồng hàm
Chồng tốn tử
Đa hình động
Là kỹ thuật sử dụng:
Các hàm cùng tên
Danh sách tham số khác nhau
Danh sách tham số được phân biệt theo:
kiểu dữ liệu của tham số
thứ tự của tham số
và số lượng tham số
Overload một phương thức, tức là tạo
ra nhiều phương thức có cùng tên
nhưng khác nhau về danh sách tham số
Override một phương thức, tức là tạo ra
một phương thức trong lớp dẫn xuất có
cùng prototype với một phương thức
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
Nếu lớp cơ sở có một phương thức bị
chồng và lớp dẫn xuất lại override
class Mammal
{
public:
void Move() {cout << “Mamal moves 1 step”;}
void Move(int d) {cout << “Mamal moves <<d<<“ steps”;}
};
class Dog : public Mammal
{
public:
void Move() {cout << “Dog moves 1 step”;}
};
int main()
{
Mamal m;
Dog d;
m.Move();
m.Move(10);
d.Move();
d.Move(10); // lỗi
Chồng toán tử cho phép thực hiện các
phép tính trên những kiểu dữ liệu do
người sử dụng tự định nghĩa cũng
tương tự như kiểu dữ liệu cơ bản khác.
Cú pháp khai báo chồng toán tử:
Hàm chồng toán tử một toán hạng
khơng có tham số.
Ví dụ: chồng tốn tử ++ (tiền tố hoặc
Hàm chồng toán tử hai tốn hạng có
một tham số.
Tham số này là tốn hạng phía bên
phải của tốn tử.
Hàm chồng toán tử được viện dẫn bởi
class Date
{
bool operator==(Date d)
{
return (day==d.day) && (month==d.month) && (year==d.year);
};
bool operator<(Date d)
{
if (year < d.year)
if (year==d.year) && (month < d.month)
return true;
else
Khi một hàm được định nghĩa là hàm ảo trong lớp cơ
sở thì nó sẽ được định nghĩa lại trong lớp dẫn xuất.
Khi nào sử dụng hàm ảo?
Lớp Parent và Child cùng có phương thức f
Khai báo một con trỏ thuộc kiểu của lớp Parent
Parent* p;
Con trỏ này trỏ đến đối tượng của lớp Child
p = new Child;
Sau đó, thực hiện lời gọi
p->f;
{
public:
void Move() {cout << “Mammal moves 1 step”;}
};
class Dog : public Mammal
{
public:
void Move() {cout << “Dog moves 1 step”;}
};
int main()
{
Mamal* p = new Dog();
class Mammal
{
public:
void virtual Move() {cout << “Mammal moves 1 step”;}
};
class Dog : public Mammal
{
public:
void Move() {cout << “Dog moves 1 step”;}
};
int main()
{
Lớp cơ sở trừu tượng là lớp cơ sở khơng có
đối tượng nào và chỉ sử dụng để cho các lớp
khác kế thừa.
Hàm thuần ảo được khai báo trong lớp sẽ làm
cho lớp đó trở thành lớp cơ sở trừu tượng.
virtual kiểu_trả_về tên_hàm(danh sách tham số) = 0;
Tất cả các lớp dẫn xuất đều phải định nghĩa
{
public:
virtual void Move() = 0;
};
class Dog : public Mammal
{
public:
void Move() {cout << "Dog moves 1 step";}
};
void main()
{