Search…

Hàm có Tham số với Giá trị Ngầm định

17/09/20203 min read
Tìm hiểu về cách sử dụng hàm với tham số có giá trị ngầm định trong C++.

Đặt vấn đề

Xét ví dụ sau:

#include <iostream>

int sum(int a, int b, int c, int d)
{
      return (a + b + c + d);
}

int main()
{
      int s = sum(1, 3, 4, 5);
      std::cout << "Tong la: " << s;
      return 0;
}

Hàm sum trong chương trình trên thực hiện việc tính tổng 4 số nguyên. Tuy nhiên, chỉ cần tính tổng của 2 hay 3 số nguyên mà không phải là 4 số nguyên. Vấn đề được giải quyết khi viết thêm một hàm tính 2 số nguyên và 3 số nguyên khác. Hoặc cũng có thể gọi hàm với giá trị có tham số bằng 0 như sau:

int s = sum(1, 2, 0, 0);

Lời gọi hàm như vậy sẽ giúp tính được tổng 2 số nguyên một và 2 từ hàm tính tổng 4 số nguyên ở trên. Một vấn đề khác được đặt ra khi trong chương trình có quá nhiều lần hàm được gọi để tính tổng 2 số nguyên. Như vậy, cứ mỗi lần gọi hàm, lúc nào cũng phải viết thêm 2 tham số ngầm định giá trị 0 ở sau.

Đó là trường hợp với ví dụ trên. Trong thực tế, hãy thử tưởng tượng nếu một hàm được gọi nhiều lần với nhiều tham số có giá trị ngầm định (không thay đổi giá trị qua các lần gọi). Mỗi lần như vậy lúc nào cũng phải viết thêm một danh sách dài các tham số có giá trị giống nhau. Đó thật sự là một công việc không mấy thú vị. Từ đó hàm có tham số với giá trị ngầm định được C++ mở rộng ra (so với C) để giải quyết vấn đề này.

Hàm có tham số với giá trị ngầm định

Cú pháp

<Kiểu hàm> <Tên hàm> (t/s1, t/s2, ..,t/sn, t/smd1 = gt1, t/smd2 = gt2,…, t/smdn = gtn);

Trong đó

  • t/s1, t/s2,…,t/sn là các tham số được khai báo bình thường. Tức là gồm có kiểu dữ liệu và tên tham số.

  • Các tham số ngầm định t/smd1 ,t/smd2, ..,t/smdn có gán thêm các giá trị ngầm định gt1, gt2,…, gtn.

Một lời gọi bất kỳ đến hàm này đều phải có đầy đủ các tham số ứng với t/s1,…, t/sn (không phải tham số ngầm định). Nhưng có thể có hoặc không các tham số ngầm định ứng với t/smd1,…,t/smdn. Nếu tham số nào không có thì nó sẽ tự động gán với giá trị ngầm định đã khai báo.

Ví dụ

Xét hàm tính lũy thừa

int exponential(int x, int n = 2);

Hàm này có một tham số có giá trị ngầm định là số mũ n. Nếu lời gọi hàm bỏ qua số mũ này thì chương trình sẽ hiểu là n = 2 và tính bình phương của x.

Khi gọi int e = exponential(4, 3); chương trình sẽ tính e = 43

Khi gọi int e = exponential(4); chương trình sẽ tính e = 42

Xét hàm tính tổng 4 số nguyên

int sum(int a, int b, int c = 0, int d = 0);

Có thể

  • tính tổng của 4 số nguyên: 1, 2, 3, 4  bằng cách gọi hàm sum(1, 2, 3, 4)
  • tính tổng 3 số nguyên 1, 2, 3 bằng cách gọi sum(1, 2, 3)
  • tính tổng 2 số nguyên 1, 2 bằng cách gọi sum(1, 2)

Lưu ý

Các tham số với giá trị ngầm định phải được khai báo liên tục và xuất hiện cuối cùng trong danh sách tham số.

Ví dụ

int sum(int a, int b = 0, int c, int d = 0);

Trường hợp này sai vì các tham số có giá trị ngầm định không liên tục.

int sum(int a, int b = 0, int c = 0, int d);

Trường hợp này sai vì tham số có giá trị ngầm định không ở cuối.

int sum(int a, int b, int c = 0, int d = 0);

Trường hợp này đúng vì thỏa điều kiện.

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024