Lập trình C++ bài số 6

Chia sẻ bởi Đặng Anh Tuấn | Ngày 29/04/2019 | 58

Chia sẻ tài liệu: lập trình C++ bài số 6 thuộc Tin học 9

Nội dung tài liệu:

Chương 6: Đa hình
Nội dung chính
Đ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 toán tử
Đa hình động
Hàm ảo.
1. Chồng hàm
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ố
Để thực hiện các nhiệm vụ khác nhau.
Khi xét các hàm chồng, chương trình dịch không xem xét đến kiểu trả về của hàm.
Overriding function
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 trong lớp cơ sở.
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
}
Ẩn phương thức của lớp cơ sở
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 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ó.
Ví dụ: Ẩn phương thức của lớp cơ sở
class Mammal
{
public:
void Move() {cout << “Mamal moves 1 step”;}
void Move(int d) {cout << “Mamal moves <};
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
}
2. Chồng toán tử
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ử:
kiểu_dữ_liệu operator ký_hiệu (danh sách tham số);
2.1. Chồng toán tử 1 toán hạng
Hàm chồng toán tử một toán hạng không có tham số.
Ví dụ: chồng toán tử ++ (tiền tố hoặc hậu tố)
2.2. Chồng toán tử 2 toán hạng
Hàm chồng toán tử hai toán hạng có một tham số.
Tham số này là toán hạng phía bên phải của toán tử.
Hàm chồng toán tử được viện dẫn bởi đối tượng phía bên trái của toán tử.
Chồng toán tử nhân
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
return (month==d.month) && (day < d.day);
};
};
3. Hàm ảo
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;
Kết quả: f của lớp Parent sẽ được viện dẫn
Nếu f được khai báo là hàm ảo trong lớp Parent thì f của lớp Child sẽ được viện dẫn.
Ví dụ: Không sử dụng hàm ảo
class Mammal
{
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();
p->Move(); // “Mammal moves 1 step”
}
Ví dụ: Sử dụng hàm ảo
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()
{
Mamal* p = new Dog();
p->Move(); // “Dog moves 1 step”
}
Hàm thuần ảo
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 hàm thuần ảo.
Ví dụ: hàm thuần ảo
class Mammal
{
public:
virtual void Move() = 0;
};
class Dog : public Mammal
{
public:
void Move() {cout << "Dog moves 1 step";}
};
void main()
{
Dog p;
p.Move(); // “Dog moves 1 step”
Mammal m; // ”Lỗi”
m.Move();
}
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Đặng Anh Tuấn
Dung lượng: | Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)