Function Overloading Visual C++

0

Giới thiệu về Function Overloading

Trong bài viết này ad sẽ giới thiệu cho các bạn về hàm được nạp chồng nhau ( Function Overloading), giải thích về nó và cách sử dụng, bắt đầu nhé

 

Function Overloading

Đặt vấn đề

Chúng ta sẽ cùng xét ví dụ dưới đây:

Chương tìm số lớn nhất trong 2 số nguyên:


#include <iostream>

int max(int x, int y)
{
if(x> y) return x;
else return y;
}

int main()
{
int m = max(5, 6);
std::cout << "m = " << m;
return 0;
}

Chuopwng trình trên khi chạy sẽ được kết quả là: m = 6 (Kết quả đúng đấy nhỉ :3 ).

bạn hãy thử nghĩ xem nếu chúng ta thay dòng lệnh


int m = max(5, 6);

bằng dòng này


int m = max(5.3, 6.5);

Khi bạn chạy sẽ nhận được kết quả ra là: m = 6 (Bạn có biết tại sao không ? )

Trong trường hợp này chúng ta sẽ sử dụng hàm sau đây để tính max của hai số thực chứ không phải hai số nguyên


float fmax(float x, float y)
{
if(x > y) return x;
else return x;
}

Và tương tự như vậy với các số liệu khác nhau thì chúng ta sẽ có các chương trình như sau đây


double dmax(double x, double y)
{
if(x > y) return x;
else return y;
}

Hoặc với kiểu char


char cmax(char x, char y)
{
if(x > y) return x;
else return y;
}

Như vậy nếu bạn muốn cho phép người dùng nhập một kiểu dữ liệu bất kì thì bạn sẽ phải gọi rất nhiều kiểu hàm với tên khác nhau, rất dài phải không, và để giải quyết nó thì C++ cho phép chúng ta nạp chồng hàm với nhau

Cách nạp chồng hàm Function Overloading trong C++

Nạp chồng hàm (Function Overloading) có lẽ ít bạn mới làm quen với C++ biết đến. Nhiều bạn nghĩ rằng C++ sử dụng các kĩ năng của C nhưng như vậy là sai lầm, có nhiều điều mới mẻ mà chỉ C++ mới có, điển hình như bài bạn đang đọc. Kĩ thuật này cho phép bạn có thể sử dụng các hàm gần “giống nhau” với cùng một tên gọi và chỉ khác nhau về kiểu dữ liệu tham số hoặc số lượng tham số

Tiếp tục xét lại ví trụ ở trên kia

Nếu khai báo nạp chồng hàm thì các bạn sẽ làm như sau:


int max(int x, int y)
{
if(x > y) return x;
else return y;
}

float max(float x, float y)
{
if(x > y) return x;
else return y;
}

double max(double x, double x)
{
if(x > y) return x;
else return y;
}

char max(char x, char y)
{
if(x > y) return x;
else return y;
}

và bây giờ với các bộ số ở bất kì kiểu dữ liệu nào như:


max(4, 5)
max(4.3, 5.5)
max(‘A’, ‘B’)

thì bạn đều thu được kết quả chính xác vì chương trình sẽ sử dụng kiểu của dữ liệu để chọn hàm xử lí phù hợp.

Ví dụ

Khi bạn gọi max(5,6) thì cả hai tham số đều thuộc kiểu integer nên chương trình sẽ dùng hàm


int max(int x, int y);

Nếu bạn gọi max(‘X’, ‘Y’) thì chương trình sẽ gọi.


char max(char X, char Y);

 

Ngoài ra như ad nói ở trên, có một kiểu khác mà bạn cũng có thể nạp chồng hàm đó là số lượng tham số khác nhau

Ví dụ
  1. int max(int x, int y); //hàm tìm max của hai số nguyên
  2. int max(int x, int y, int z); //hàm tính max của ba số nguyên

Chương trình lúc này sẽ sử dụng số lượng tham số để gọi hàm

Đến đây chắc bạn đã có thể tự đưa ra kết luận về các trưởng hợp có thể và không thể sử dụng nạp chồng hàm trong C++

Bạn có thể tham khảo thêm tại:

http://en.wikipedia.org/wiki/Function_overloading

https://msdn.microsoft.com/en-us/library/5dhe1hce.aspx

Leave A Reply

Your email address will not be published.