Ghi đè hàm C ++

C Function Overriding



Trong bài viết này, chúng tôi sẽ đề cập đến việc ghi đè hàm trong ngôn ngữ lập trình C ++. C ++ hỗ trợ đa hình thời gian chạy.

Trong ghi đè hàm, lớp con định nghĩa lại hàm đã được định nghĩa trong lớp cha của nó.







Nó cho phép lập trình viên cung cấp chức năng dành riêng cho lớp dẫn xuất (ngay cả khi nó được định nghĩa trong lớp cơ sở).



Bây giờ, chúng ta sẽ xem một vài ví dụ và hiểu khái niệm ghi đè hàm trong C ++.



Ví dụ 1

Tôi đã định nghĩa hai lớp trong đoạn mã ví dụ dưới đây - một lớp cơ sở và một lớp dẫn xuất. Lớp cơ sở có một hàm thành viên, tức là disp (). Derived_Class được kế thừa từ Base_Class. Hàm disp () hiện diện trong Base_Class và sau đó được định nghĩa lại trong Derived_Class.





Trong hàm main (), một đối tượng của Derived_Class, tức là d, được tạo. Sau đó, chúng ta gọi hàm disp () trên đối tượng lớp dẫn xuất, vì vậy hàm trong lớp dẫn xuất sẽ được gọi. Phiên bản lớp cơ sở được bỏ qua ở đây. Bạn có thể thấy bên dưới đầu ra dưới dạng hàm disp () trong lớp dẫn xuất.

#bao gồm

sử dụng không gian tên std;

// lớp cơ sở
lớp Base_Class
{
công cộng:
vô hiệutận dụng()
{
Giá cả<< 'hàm disp () trong lớp cơ sở.' <<endl;
}

};

//Lớp có nguồn gốc
class Derived_Class:Public Base_Class
{
công cộng:
vô hiệutận dụng()
{
Giá cả<< 'hàm disp () trong lớp dẫn xuất' <<endl;
}
};

NSchủ chốt()
{
Derived_Class d;
NS.tận dụng(); // hàm disp () trên đối tượng lớp dẫn xuất
trở lại 0;
}



Ví dụ-2

Trong ví dụ này, chúng ta sẽ thấy cách cố ý gọi phiên bản lớp cơ sở của hàm thông qua đối tượng lớp dẫn xuất. Trong định nghĩa hàm lớp dẫn xuất, chúng ta sử dụng toán tử phân giải phạm vi [::] để gọi phiên bản lớp cơ sở của hàm.

#bao gồm

sử dụng không gian tên std;

lớp Base_Class
{
công cộng:
vô hiệutận dụng()
{
Giá cả<< 'hàm disp () trong lớp cơ sở.' <<endl;
}

};

class Derived_Class:Public Base_Class
{
công cộng:
vô hiệutận dụng()
{
Base_Class::tận dụng(); // Gọi phiên bản lớp cơ sở của disp ()
}
};

NSchủ chốt()
{
Derived_Class d;
NS.tận dụng();
trở lại 0;
}

Ví dụ-3

Đây là một ví dụ khác về ghi đè hàm. Trong ví dụ này, chúng ta đã tạo một lớp cha - Animal và hai lớp dẫn xuất - Duck và Dog. Lớp cơ sở, tức là lớp Animal, có hàm thành viên là sound ().

Trong lớp dẫn xuất / lớp con, tức là Dog, chúng tôi đã định nghĩa lại cùng một hàm, tức là sound (), để ghi đè định nghĩa lớp cơ sở của nó. Tương tự, trong lớp dẫn xuất khác, tức là Duck, chúng tôi đã định nghĩa lại cùng một hàm, tức là sound ().

Trong hàm main (), chúng ta đã tạo đối tượng dog là Dog và duck of Duck. Vì vậy, bây giờ khi chúng ta gọi hàm sound () cho dog and duck, phiên bản lớp dẫn xuất của hàm sound () sẽ gọi. Bạn có thể xem đầu ra của chương trình như hình dưới đây. Vì vậy, với sự trợ giúp của chức năng ghi đè, chúng ta có thể gọi hàm dành riêng cho lớp dẫn xuất.

#bao gồm

sử dụng không gian tên std;

lớp động vật
{
công cộng:
vô hiệuâm thanh()
{
Giá cả<< 'Tiếng động vật!' <<endl;
}

};

// Lớp có nguồn gốc - Lớp chó
lớp chó:động vật công cộng
{
công cộng:
vô hiệuâm thanh()
{
Giá cả<< 'Tiếng chó - sủa.' <<endl;
}
};

// Lớp có nguồn gốc - Lớp vịt
Vịt lớp:động vật công cộng
{
công cộng:
vô hiệuâm thanh()
{
Giá cả<< 'Tiếng vịt kêu - lang băm.' <<endl;
}
};


NSchủ chốt()
{
Chó chó;
Vịt vịt;

chó.âm thanh(); // sound () của con chó
Vịt.âm thanh(); // sound () của vịt

trở lại 0;
}

Phần kết luận

Trong bài viết này, tôi đã giải thích về việc ghi đè hàm trong C ++ . Ngôn ngữ C ++ hỗ trợ đa hình thời gian chạy. Ghi đè hàm giúp đạt được đa hình thời gian chạy trong C ++. Bài viết này đã xem xét khái niệm ghi đè hàm và cách đạt được tính đa hình thời gian chạy bằng cách sử dụng ghi đè hàm.