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

lap trinh C bai so 6

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>

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 tốn tử


 Đa hình động


</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

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ố


</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4></div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

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


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=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


</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

Ẩ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


</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=8>

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


</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

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ử:


</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=10>

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 tốn tử ++ (tiền tố hoặc


</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=11></div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

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



 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


</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13></div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=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


</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

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;



</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

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();


</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=17>

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()
{


</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=18>

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


</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=19>

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()
{


</div>

<!--links-->

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×