Quá tải hàm còn được gọi là quá tải phương thức. Nạp chồng hàm là tính năng được cung cấp bởi khái niệm đa hình được sử dụng rộng rãi trong lập trình hướng đối tượng.
Để đạt được tính năng nạp chồng hàm, các hàm phải thỏa mãn các điều kiện này -
-
Loại chức năng trả về phải giống nhau
-
Tên của các chức năng phải giống nhau
-
Các thông số có thể khác nhau về loại nhưng phải giống nhau về số lượng
Ví dụ
int display(int a); int display(float a); // both the functions can be overloaded int display(int a); float display(float b); //both the functions can’t be overloaded as the return type of one function is different from another
hãy thảo luận về các hàm không thể nạp chồng trong C ++
-
các hàm có tên khác nhau và số lượng tham số khác nhau
Ví dụ
#include<iostream> using namespace std; int max_two(int a, int b) //contains two parameters{ if(a>b){ return a; } else{ return b; } } int max_three(int a, int b ,int c) //contains three parameters{ if (a>b && a>c){ return a; } else if(b>c){ return b; } else{ return c; } } int main(){ max_two(a,b); return 0; }
-
Các hàm có cùng tên nhưng kiểu trả về khác nhau
Ví dụ
#include<iostream> using namespace std; int max_two(int a, int b){ if(a>b){ return a; } else{ return b; } } float max_two(int a, int b){ if(a>b){ return a; } else{ return b; } } int main(){ max_two(a, b); return 0; }
-
Một hàm thành viên thỏa mãn tất cả các điều kiện nạp chồng hàm nhưng nếu nó là một hàm thành viên tĩnh hơn thì nó không thể được nạp chồng.
Ví dụ
#include<iostream> class check{ static void test(int i) { } void test(int i) { } }; int main(){ check ch; return 0; }
-
Nếu hai hàm hoàn toàn giống nhau nhưng chỉ khác nhau về các đối số mặc định, tức là một trong các hàm chứa các đối số mặc định, thì chúng được coi là giống nhau, có nghĩa là chúng không thể được nạp chồng và do đó trình biên dịch sẽ gây ra lỗi khai báo lại cùng một hàm.
Ví dụ
#include<iostream> #include<stdio.h> using namespace std; int func_1 ( int a, int b){ return a*b; } int func_1 ( int a, int b = 40){ return a+b; } Int main(){ func_1(10,20); return 0; }