Quá tải hàm (function overloading)

Một phần của tài liệu Lý thuyết lập trình C++ (Trang 37 - 39)

- from alpha to omega 4 Trả về giá trị của hàm (returning value from functions)

6. Quá tải hàm (function overloading)

C++ cho phép nhiều hàm trùng tên nhau trong cùng một phạm vi, miễn là danh sách tham số của chúng khác nhau (khác về số lượng tham số hoặc nếu cùng số lượng thì các tham số ở những vị trí tương ứng phải khác kiểu). Khả năng này được gọi là “quá tải hàm” (function overloading). Giả sử một hàm có tênoverloaded_func được quá tải thành tầm chục cái hàm cùng tên thì khi bắt gặp lời gọi hàm overloaded_func, compiler sẽ xem xét qua chục hàm này để tìm ra hàm phù hợp nhất dựa vào việc so sánh các đối số truyền vào với danh sách tham số ở header hàm (về số lượng cũng như kiểu ở các vị trí tương ứng). Ví dụ như chương trình sau:

C++ Code:

Lựa chọn code | Ẩn/Hiện code

#include <iostream>

using namespace std;

// khai báo ba hàm cùng tên

int min(int, int);

int min(int, int, int);

double min(double, double);

// hàm tính min 2 số nguyên

int min(int a, int b){

cout << "Call function 1: int min(int a, int b)" << endl; int minimum=a; if(b<minimum){ return b; } return minimum; } // hàm tính min 3 số nguyên

int min(int a, int b, int c){

cout << "Call function 2: int min(int a, int b, int c)" << endl; int minimum=a; if(b<minimum){ minimum=b; } if(c<minimum){ minimum=c; } return minimum; }

// hàm tính min hai số double

double min(double a, double b){

cout << "Call function 3: double min(double a, double b)" << endl; float minimum=a; if(b<minimum){ return b; } return minimum; }

// hàm main

int main(){

// gọi hàm thứ nhất

int x=min(2,5);

cout << x << endl << endl; // gọi hàm thứ hai

int y=min(2, 3, -1);

cout << y << endl << endl;

// gọi hàm thứ ba

double z=min(2.4, 5.2); cout << z << endl << endl;

return 0; }

Kết quả như sau: Trích dẫn:

Call function 1: int min(int a, int b) 2

Call function 2: int min(int a, int b, int c) -1

Call function 3: double min(double a, double b) 2.4

Khi quá tải hàm có tham số mặc định thì cần phải hết sức chú ý bởi vì rất dễ dẫn đến sự nhập nhằng. Ví dụ ta có hàm min được quá tải thành hai hàm như sau:

C++ Code:

Lựa chọn code | Ẩn/Hiện code

int min(int a, int b);

int min(int a, int b, int c=0);

nếu bắt gặp câu lệnh C++ Code:

Lựa chọn code | Ẩn/Hiện code

x=min(4, 6);

thì compiler không biết phải gọi hàm nào vì xét cả hai hàm đều hòan toàn hợp lệ. Nếu gọi hàm thứ nhất, min sẽ được truyền đủ 2 đối số và kết quả z=4. Còn nếu gọi hàm thứ hai, đối thứ 3 bị khuyết và được mặc định là 0, kết quả z=0. Điều này gây ra lỗi biên dịch.

Hết bài 7b

__________________

Vấn đề không phải là bước nhanh, mà là luôn luôn bước luôn bước

Đã được chỉnh sửa lần cuối bởi first_pace : 08-03-2011 lúc 03:20 PM.

07-03-2011, 09:00 PMfirst_pace first_pace Thành viên chính thức Ngày gia nhập: 02 2011 Nơi ở: Hà Nội Bài viết: 67 Hàm trong C++

Một phần của tài liệu Lý thuyết lập trình C++ (Trang 37 - 39)

Tải bản đầy đủ (DOCX)

(78 trang)
w