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

Trong C++, hai hàm có thể có cùng tên nếu số lượng và/hoặc loại đối số được truyền vào 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 quá tải. 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

Lưu ý rằng kiểu trả về của cả 4 hàm này không giống nhau. Các hàm 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 loại và cùng số đối số. Do đó, trình biên dịch sẽ báo lỗi


ví dụ 1. Quá tải 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 
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
Nạp chồng hàm trong C++
Làm việc quá tải cho hàm absolute()

Trong chương trình này, chúng tôi nạp chồng hàm

// Error code
int test(int a) { }
double test(int b){ }
3. Dựa trên loại tham số được truyền trong khi gọi hàm, hàm tương ứng được gọi


ví dụ 2. Quá tải bằng cách sử dụng số lượng tham số khác nhau

#include 
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, hàm

// Error code
int test(int a) { }
double test(int b){ }
4 đượ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à loại đối số được truyền, hàm
// Error code
int test(int a) { }
double test(int b){ }
4 tương ứng được gọi

Nạp chồng hàm trong C++
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 phải là trường hợp nạp chồng hàm


Ghi chú. Trong C++, nhiều hàm thư viện chuẩn bị quá tải. Ví dụ: hàm

// Error code
int test(int a) { }
double test(int b){ }
6 có thể nhận
// Error code
int test(int a) { }
double test(int b){ }
0,
// Error code
int test(int a) { }
double test(int b){ }
1,
// Error code
int test(int a) { }
double test(int b){ }
2, v.v. như tham số. Điều này có thể xảy ra vì hàm
// Error code
int test(int a) { }
double test(int b){ }
6 bị quá tải trong C++

Nạp chồng hàm (nạp chồng hàm) và nạp chồng toán tử (nạp chồng toán tử) trong C++ cho phép bạn xác định nhiều hơn một định nghĩa cho một tên hàm hoặc một toán tử trong cùng phạm vi (phạm vi), được gọi là tương ứng

Một tuyên bố nạp chồng là một tuyên bố đã được khai báo với cùng tên như một tuyên bố đã được khai báo trước đó trong cùng một phạm vi, ngoại trừ điều đó. cả hai báo cáo đều có các tham số khác nhau và định nghĩa khác nhau

Khi bạn gọi một hàm nạp hoặc một hàm nạp toán tử, thì trình biên dịch sẽ quyết định cách giải thích hợp nhất để sử dụng bằng cách so sánh các kiểu tham số bạn đã sử dụng để gọi hàm hoặc toán tử với các kiểu tham số đã có . Lựa chọn lựa chọn phương trình nạp chồng hoặc nạp toán tử thích hợp nhất này được gọi là giải quyết quá tải - phân giải nạp chồng



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

Bạn có thể có nhiều định nghĩa cho cùng tên hàm trong cùng phạm vi. Định nghĩa của hàm phải khác nhau và về kiểu và/hoặc tham số trong danh sách tham số. Bạn không thể tải các hàm khai báo mà chỉ khác nhau ở kiểu trả về

Trong ví dụ sau, cùng một hàm hamIn được sử dụng cho các kiểu dữ liệu khác nhau

#include 
using namespace std;

class inDuLieu
{
public:
    void hamIn(int i) {
        cout << "In so nguyen: " << i << endl;
    } 
    void hamIn(double  f) {
        cout << "In so thuc: " << f << endl;
    }     
    void hamIn(char* c) {
        cout << "In ky tu: " << c << endl;
    }
};

int main(void)
{
    inDuLieu idl;

    // Goi ham hamIn de in so nguyen
    idl.hamIn(12345);
    // Goi ham hamIn de in so thuc
    idl.hamIn(6677.02);
    // Goi ham hamIn de in ky tu
    idl.hamIn("Hoc C++ co ban va nang cao.");

    return 0;
}

Biên dịch và chạy chương trình C++ trên sẽ cho kết quả sau

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

Nạp tiền điện tử trong C++

Bạn có thể định nghĩa lại hoặc tải hầu hết các toán tử có sẵn trong C++. Vì thế, một thành viên lập trình có thể sử dụng các thuật toán với kiểu định nghĩa tự nhiên (do người dùng định nghĩa)

Nạp tiền điện tử trong C++ là các hàm có tên đặc biệt. Tên hàm là từ khóa toán tử theo sau là ký hiệu của toán tử đã được định nghĩa. Giống như bất kỳ hàm nào khác, một hệ thống nạp tiền có một kiểu trả về và một danh sách tham số

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

Khai báo toán tử + để cộng hai đối tượng Box và trả về đối tượng Box cuối cùng. Hầu hết các toán tử tải xuống có thể được định nghĩa dưới dạng định dạng. các hàm không có thành viên (không phải thành viên) hoặc các hàm thành viên lớp. Trong trường hợp trên, chúng ta định nghĩa hàm ở dạng không phải thành viên của một lớp, sau đó chúng ta phải truyền hai tham số cho mỗi hạng toán, như sau

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

Ví dụ sau minh họa khái niệm nạp chồng toán tử bằng cách sử dụng một hàm thành viên. Ở đây, một đối tượng được truyền tải là một tham số mà các thuộc tính của nó sẽ được truy cập bởi đối tượng sử dụng này, đối tượng sẽ gọi điện tử này có thể được truy cập bởi ứng dụng toán tử này,

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

Biên dịch và chạy chương trình C++ trên sẽ cho kết quả sau

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


The code could load and could not load in C++

Bảng bên dưới liệt kê danh sách các thuật toán có thể được tải lên trong C++

+-*/%^&|~!,=<><=>=++--<<>>==!=&&||+=-=/=%=^=&=|=*=<<=>>=[]()->->*newnew []deletedelete []

Còn đây là danh sách các thuật toán không thể tải chồng lên trong C++

*. ?

Ví dụ về Nạp tiền điện tử trong C++

Dưới đây là các ví dụ đa dạng minh họa Nạp tiền điện tử trong C++, từ đó giúp bạn hiểu sâu hơn về khái niệm này. You click to link to see example