Trong bài này, bạn sẽ được học thế nào là đối số mặc định, cách chúng được sử dụng và khai báo cần thiết để sử dụng chúng.
Trong lập trình C++, bạn có thể cung cấp các giá trị mặc định cho tham số của hàm.
Ý tưởng đằng sau việc sử dụng tham số mặc định khá đơn giản. Nếu một hàm được gọi bằng cách truyền vào đối số, các đối số đó sẽ được sử dụng bởi hàm đó.
Nhưng nếu các đối số không được truyền vào trong khi gọi hàm, vậy giá trị mặc đính sẽ được sử dụng.
Giá trị mặc định được truyền vào đối số trong nguyên mẫu hàm.
Làm việc với đối số mặc định
Ví dụ: Đối số mặc định
// Chương trình C++ thể hiện cách hoạt động của đối số mặc định
#include <iostream>
using namespace std;
void display(char = '*', int = 1);
int main()
{
cout << "No argument passed:n";
display();
cout << "nFirst argument passed:n";
display('#');
cout << "nBoth argument passed:n";
display('@', 5);
return 0;
}
void display(char c, int n)
{
for(int i = 1; i <= n; ++i)
{
cout << c;
}
cout << endl;
}
Đầu ra
No argument passed:
* First argument passed: # Both argument passed: @@@@@ |
Trong chương trình trên, bạn cần xem giá trị mặc định được gán cho đối số trong hàm void display(char = ‘*’, int = 1);.
Đầu tiên, hàm display() sẽ được gọi mà không truyền vào đối số nào. Trong trường hợp này, hàm display() sẽ sử dụng cả hai đối số mặc định c = * và n = 1.
Sau đó chỉ có đối số đầu tiên được truyền vào khi sử dụng hàm lần thứ 2. Trong trường hợp này, hàm sẽ không sử dụng giá trị mặc định cho tham số đầu tiên. Thay vào đó, nó sẽ sử dụng tham số thực sự được truyền vào cho đối số đầu tiên c = # và lấy giá trị mặc định cho đối số thứ 2 n = 1.
Khi hàm display() được gọi lần thứ 3 bằng cách truyền vào cả hai đối số, đối số mặc định sẽ không được sử dụng. Vậy, giá trị của c = $ và n = 5.
Lỗi thường gặp khi sử dụng đối số mặc định
1. void add(int a, int b = 3, int c, int d = 4);
Hàm trên sẽ không thể được biên dịch. Bạn không thể bỏ qua một đối số mặc định nếu nó nằm giữa hai đối số khác.
Trong trường hợp này, c cũng nên được gán một giá trị mặc định.
2. void add(int a, int b = 3, int c, int d);
Hàm trên cũng sẽ không được biên dịch. Bạn cần cung cấp giá trị mặc định cho mỗi đối số sau b.
Trong trường hợp này, c và d nên được gán giá trị mặc định.
Nếu bạn chỉ muốn một đối số mặc định duy nhất, đảm bảo rằng đối số đó nằm cuối cùng. void add(int a, int b, int c, int d = 4);
3. Dù bạn sử dụng đối số mặc định thế nào, một hàm luôn luôn được viết để thực hiện một mục đích nhất định.
Nếu hàm của bạn thực hiện nhiều hơn một tác vụ hoặc logic quá phức tạp, bạn có thể sử dụng nạp chồng hàm để phân tách logic của hàm hợp lý hơn.