Tham số mặc định (Default Arguments)
C++ cho phép gán giá trị mặc định cho tham số - nếu người gọi không truyền đối số đó, giá trị mặc định sẽ được dùng.
Cú pháp cơ bản
Phần tiêu đề “Cú pháp cơ bản”#include <iostream>
void greet(std::string name, std::string greeting = "Xin chao") { std::cout << greeting << ", " << name << "!" << std::endl;}
int main() { greet("Alice"); // Xin chao, Alice! greet("Bob", "Chao buoi sang"); // Chao buoi sang, Bob! return 0;}Quy tắc quan trọng: tham số mặc định phải nằm ở cuối
Phần tiêu đề “Quy tắc quan trọng: tham số mặc định phải nằm ở cuối”C++ bắt buộc tham số có giá trị mặc định phải nằm sau các tham số không có giá trị mặc định:
// Hợp lệvoid greet(std::string name, std::string greeting = "Xin chao") { }
// KHÔNG hợp lệ - lỗi biên dịch// void greet(std::string greeting = "Xin chao", std::string name) { }Nhiều tham số mặc định
Phần tiêu đề “Nhiều tham số mặc định”void create_user(std::string name, int age = 18, std::string country = "Vietnam") { std::cout << name << ", " << age << ", " << country << std::endl;}
int main() { create_user("Alice"); // Alice, 18, Vietnam create_user("Bob", 25); // Bob, 25, Vietnam create_user("Charlie", 30, "USA"); // Charlie, 30, USA return 0;}⚠️ Đối số luôn được truyền theo đúng thứ tự khai báo - bạn không thể bỏ qua một tham số ở giữa mà chỉ truyền tham số sau nó.
Khai báo giá trị mặc định trong prototype, không lặp lại ở định nghĩa
Phần tiêu đề “Khai báo giá trị mặc định trong prototype, không lặp lại ở định nghĩa”Nếu hàm có khai báo (prototype) riêng, giá trị mặc định chỉ nên đặt một lần ở khai báo:
void greet(std::string name, std::string greeting = "Xin chao"); // Khai báo
int main() { greet("Alice"); return 0;}
void greet(std::string name, std::string greeting) { // KHÔNG lặp lại "= Xin chao" ở đây std::cout << greeting << ", " << name << "!" << std::endl;}Tổng kết
Phần tiêu đề “Tổng kết”- Cú pháp:
kiểu tên_tham_số = giá_trị_mặc_định - Tham số có giá trị mặc định phải nằm ở cuối danh sách tham số
- Đối số luôn phải truyền theo đúng thứ tự khai báo, không thể bỏ qua một tham số ở giữa