Nạp chồng hàm trong C++

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về nạp chồng hàm trong C ++ với các ví dụ.

Trong C ++, hai hàm có thể có cùng tên nếu số lượng và / hoặc kiểu đối số được truyền khác nhau.

Các hàm này có cùng tên nhưng các đối số khác nhau được gọi là các hàm nạp chồng. Ví dụ:

// same name different arguments
int test() { }
int test(int a) { }
float test(double a) { }
int test(int a, double b) { }

Ở đây, cả 4 hàm đều là hàm quá tải.

Chú ý rằng kiểu trả về của cả 4 hàm này không giống nhau. Các hàm bị quá tải có thể có hoặc không có các kiểu trả về khác nhau nhưng chúng phải có các đối số khác nhau. Ví dụ,

// Error code
int test(int a) { }
double test(int b){ }

Ở đây, cả hai hàm đều có cùng tên, cùng kiểu và cùng số lượng đối số. Do đó, trình biên dịch sẽ xuất hiện một lỗi.

Ví dụ 1: Nạp chồng bằng cách sử dụng các loại tham số khác nhau

// Program to compute absolute value
// Works for both int and float

#include <iostream>
using namespace std;

// function with float type parameter
float absolute(float var){
    if (var < 0.0)
        var = -var;
    return var;
}

// function with int type parameter
int absolute(int var) {
     if (var < 0)
         var = -var;
    return var;
}

int main() {
    
    // call function with int type parameter
    cout << "Absolute value of -5 = " << absolute(-5) << endl;

    // call function with float type parameter
    cout << "Absolute value of 5.5 = " << absolute(5.5f) << endl;
    return 0;
}

Đầu ra

Absolute value of -5 = 5
Absolute value of 5.5 = 5.5

Làm việc quá tải cho hàm tuyệt đối ()

Trong chương trình này, chúng tôi nạp chồng absolute()hàm. Dựa trên kiểu tham số được truyền trong quá trình gọi hàm, hàm tương ứng được gọi.

Ví dụ 2: Nạp chồng bằng cách sử dụng nhiều tham số khác nhau

#include <iostream>
using namespace std;

// function with 2 parameters
void display(int var1, double var2) {
    cout << "Integer number: " << var1;
    cout << " and double number: " << var2 << endl;
}

// function with double type single parameter
void display(double var) {
    cout << "Double number: " << var << endl;
}

// function with int type single parameter
void display(int var) {
    cout << "Integer number: " << var << endl;
}

int main() {

    int a = 5;
    double b = 5.5;

    // call function with int type parameter
    display(a);

    // call function with double type parameter
    display(b);

    // call function with 2 parameters
    display(a, b);

    return 0;
}

Đầu ra

Integer number: 5
Float number: 5.5
Integer number: 5 and double number: 5.5

Ở đây, display()hàm được gọi ba lần với các đối số khác nhau. Tùy thuộc vào số lượng và kiểu đối số được truyền vào, display()hàm tương ứng được gọi.Làm việc quá tải cho hàm display ()

Kiểu trả về của tất cả các hàm này là giống nhau nhưng không cần thiết cho trường hợp quá tải hàm.

Lưu ý: Trong C ++, nhiều hàm thư viện chuẩn bị quá tải. Ví dụ, các sqrt()chức năng có thể mất doublefloatint,vv như các thông số. Điều này có thể thực hiện được vì sqrt()hàm đã được nạp chồng trong C ++.









Gõ tìm kiếm nhanh...