Nạp chồng hàm trong C ++: Tất cả những gì bạn cần biết



Bài viết này sẽ cung cấp cho bạn kiến ​​thức chi tiết và toàn diện về Nạp chồng hàm trong C ++ với vô số ví dụ để bạn hiểu.

C ++ là một trong những ngôn ngữ lập trình rất linh hoạt và nó cũng bao gồm một số tính năng của lập trình hướng đối tượng. Quá tải là một tính năng khác của ngôn ngữ lập trình này.Các con trỏ sau sẽ được đề cập trong bài viết “Nạp chồng hàm trong C ++” này-

Quá tải C ++

Khi chúng ta tạo hai hoặc nhiều thành viên của một lớp có cùng tên nhưng khác nhau về số lượng hoặc kiểu tham số, nó được gọi là quá tải C ++. Trong C ++, chúng ta có thể nạp chồng:





giá trị mặc định của chuỗi trong java
  • phương pháp,
  • các nhà xây dựng, và
  • thuộc tính được lập chỉ mục

Các kiểu nạp chồng trong C ++

types-of-overloading-in-c++

Nạp chồng hàm trong C ++ là gì?

Nạp chồng hàm trong C ++ có thể được định nghĩa là quá trình có hai hoặc nhiều hàm thành viên của một lớp có cùng tên, nhưng khác nhau về tham số. Trong nạp chồng hàm, hàm có thể được định nghĩa lại bằng cách sử dụng các loại đối số khác nhau hoặc một số đối số khác nhau tùy theo yêu cầu. Nó chỉ là thông qua những khác biệt trình biên dịch có thể phân biệt giữa hai chức năng được nạp chồng.



Một trong những ưu điểm chính của tính năng nạp chồng hàm là nó làm tăng khả năng đọc của chương trình vì chúng ta không cần sử dụng lặp đi lặp lại các tên khác nhau cho cùng một hành động.

Bằng cách thay đổi số đối số

Theo cách nạp chồng hàm này, chúng ta xác định hai hàm có cùng tên nhưng khác số tham số cùng kiểu. Ví dụ, trong chương trình được đề cập dưới đây, chúng tôi đã thực hiện hai hàm add () để trả về tổng của hai và ba số nguyên.

// định nghĩa hàm đầu tiên int add (int a, int b) {cout<< a+b } // second overloaded function definition int add(int a, int b, int c) { cout << a+b+c }

Ở đây hàm add () được cho là quá tải, vì nó có hai định nghĩa, một định nghĩa chấp nhận hai đối số và một định nghĩa khác chấp nhận ba đối số. Hàm add () nào sẽ được gọi, tùy thuộc vào số lượng đối số.



int main () {add (10, 20) // add () với 2 tham số sẽ được gọi là add (10, 20, 30) // sum () với 3 tham số sẽ được gọi là}
#include using namespace std int add (int a, int b) {cout<< a+b <

Trong ví dụ trên, chúng ta nạp chồng hàm add () bằng cách thay đổi số lượng đối số của nó. Đầu tiên, chúng ta xác định một hàm add () với hai tham số, sau đó chúng ta nạp chồng nó bằng cách định nghĩa lại hàm add () nhưng lần này với ba tham số.

Bằng cách có các kiểu Lập luận khác nhau

Trong phương pháp này, chúng ta xác định hai hoặc nhiều hàm có cùng tên và cùng số lượng tham số, nhưng kiểu dữ liệu được sử dụng cho các tham số này khác nhau. Ví dụ trong chương trình này, chúng ta có ba hàm add (), hàm đầu tiên nhận hai đối số nguyên, hàm thứ hai nhận hai đối số float và hàm thứ ba nhận hai đối số kép.

#include using namespace std int add (int x, int y) // định nghĩa đầu tiên {cout<< x+y << endl return 0 } float add(float a, float b) { cout << a+b << endl return 0 } double add(double x, double y) { cout << x+y << endl return 0 } int main() { add(20, 40) add(23.45f, 34.5f) add(40.24, 20.433) }

Trong ví dụ trên, chúng ta định nghĩa hàm add () ba lần. Đầu tiên sử dụng số nguyên làm tham số, thứ hai sử dụng float làm tham số và thứ ba sử dụng double làm tham số.
Vì vậy, chúng tôi ghi đè hàm add () hai lần.

Ưu điểm của chức năng Overloading trong C ++

  • Chúng tôi sử dụng chức năng nạp chồng để tiết kiệm không gian bộ nhớ, tính nhất quán và khả năng đọc của chương trình của chúng tôi.

  • Với khái niệm nạp chồng hàm sử dụng, chúng ta có thể phát triển nhiều hơn một hàm có cùng tên

  • Nạp chồng hàm hiển thị hành vi đa hình cho phép chúng ta có được các hành vi khác nhau, mặc dù sẽ có một số liên kết sử dụng cùng tên của hàm.

  • Nạp chồng hàm sẽ tăng tốc độ thực thi chương trình.

  • Quá tải hàm được sử dụng để tái sử dụng mã và cũng để tiết kiệm bộ nhớ.

  • Nó giúp ứng dụng tải phương thức lớp dựa trên kiểu tham số.

  • Bảo trì mã rất dễ dàng.

Nhược điểm của chức năng Overloading trong C ++

  • Các khai báo hàm chỉ khác nhau bởi kiểu trả về của nó không thể được nạp chồng với quá trình nạp chồng hàm.
  • Các khai báo hàm thành viên có cùng tham số hoặc kiểu tên giống nhau không thể được nạp chồng nếu bất kỳ một trong số chúng được khai báo là hàm thành viên tĩnh.
  • lớp XYZ {static void func () void func () // error}

Chức năng quá tải và mơ hồ

Khi trình biên dịch không thể quyết định hàm nào nó sẽ gọi đầu tiên trong số các hàm đã được nạp chồng, tình huống này được gọi là sự mơ hồ khi nạp chồng hàm. Trình biên dịch không chạy chương trình nếu nó hiển thị lỗi không rõ ràng. Nguyên nhân của sự không rõ ràng về quá tải chức năng:

  • Loại Chuyển đổi.
  • Hàm với các đối số mặc định.
  • Hàm với một tham chiếu vượt qua

Loại chuyển đổi:

#include using namespace std void function (float) void function (int) void function (float x) {std :: cout<< 'Value of x is : ' <

Ví dụ trên đưa ra một lỗi - “lệnh gọi quá tải‘ function (double) ’là không rõ ràng”. Hàm (3.4) sẽ gọi hàm đầu tiên. Hàm (34) gọi hàm thứ hai theo dự đoán của chúng tôi. Nhưng đây không phải là điều xảy ra bởi vì trong C ++, tất cả các hằng số dấu phẩy động được coi là kép chứ không phải là một float. Nếu chúng ta thay thế biến float thành biến kép, chương trình sẽ hoạt động tốt. Do đó chúng tôi gọi đây là lỗi chuyển đổi kiểu từ float thành double.

Hàm với các đối số mặc định:

#include using namespace std void function (int) void function (int, int) void function (int x) {std :: cout<< 'Value of x is : ' <

Ví dụ trên đưa ra lỗi nói rằng “lệnh gọi quá tải‘ fun (int) ’là không rõ ràng”, điều này là do hàm (int y, int z = 12) có thể được gọi theo hai cách:

  1. Bằng cách gọi hàm với một đối số (và nó sẽ tự động nhận giá trị của z = 12)
  2. Bằng cách gọi hàm với hai đối số.

Khi chúng ta gọi hàm: function (12), chúng ta điền đầy đủ điều kiện của cả function (int) và function (int, int), do đó trình biên dịch gặp phải tình trạng mơ hồ hiển thị lỗi.

Hàm với tham chiếu chuyển qua

#include using namespace std void function (int) void function (int &) void function (int a) {std :: cout<< 'Value of a is : ' < 

Chương trình trên đưa ra lỗi nói rằng “cuộc gọi quá tải‘ fun (int &) ’là không rõ ràng”. Như chúng ta thấy, hàm đầu tiên nhận một đối số nguyên và hàm thứ hai nhận một tham số tham chiếu làm đối số. Trong trường hợp này, trình biên dịch không thể hiểu được chức năng nào là cần thiết bởi người dùng vì không có sự khác biệt về cú pháp giữa fun (int) và fun (int &), do đó nó gây ra lỗi mơ hồ.

Với điều này, chúng ta kết thúc phần Nạp chồng hàm này trong C ++. Nếu bạn muốn tìm hiểu thêm, hãy xem bởi Edureka, một công ty học trực tuyến đáng tin cậy. Khóa đào tạo và cấp chứng chỉ Java J2EE và SOA của Edureka được thiết kế để đào tạo bạn về cả khái niệm Java cốt lõi và nâng cao cùng với các khung công tác Java khác nhau như Hibernate & Spring.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần nhận xét của blog này và chúng tôi sẽ liên hệ lại với bạn trong thời gian sớm nhất.