Định nghĩa - tạo một hàm
Cú pháp cơ bản
Phần tiêu đề “Cú pháp cơ bản”#include <iostream>
// kiểu_trả_về tên_hàm(kiểu tham_số1, kiểu tham_số2) {// ... thân hàm ...// return giá_trị; // nếu kiểu trả về không phải void// }
int add(int a, int b) { return a + b;}
int main() { int result = add(5, 3); std::cout << result << std::endl; // 8 return 0;}Hàm không trả về giá trị: void
Phần tiêu đề “Hàm không trả về giá trị: void”Khi hàm không cần trả về giá trị nào, dùng kiểu void:
void greet(std::string name) { std::cout << "Xin chao, " << name << "!" << std::endl; // Không có return, hoặc "return;" (không kèm giá trị)}
int main() { greet("Alice"); // Xin chao, Alice! return 0;}Khai báo hàm (function declaration/prototype) trước khi dùng
Phần tiêu đề “Khai báo hàm (function declaration/prototype) trước khi dùng”C++ yêu cầu một hàm phải được khai báo trước khi sử dụng. Nếu hàm main() gọi một hàm được định nghĩa ở phía dưới, cần khai báo “prototype” trước:
#include <iostream>
int add(int a, int b); // Khai báo (prototype) - báo cho trình biên dịch biết hàm này tồn tại
int main() { std::cout << add(2, 3) << std::endl; // OK, dù add() được định nghĩa bên dưới return 0;}
int add(int a, int b) { // Định nghĩa đầy đủ return a + b;}Trong các project nhiều file, prototype thường được đặt trong header file (.h) - sẽ học chi tiết ở bài “Header file và Namespace”.
Gọi hàm
Phần tiêu đề “Gọi hàm”int square(int x) { return x * x;}
int main() { std::cout << square(4) << std::endl; // 16
int numbers[] = {1, 2, 3}; for (int n : numbers) { std::cout << square(n) << " "; // 1 4 9 }
return 0;}Tổng kết
Phần tiêu đề “Tổng kết”- Cú pháp:
kiểu_trả_về tên_hàm(kiểu tham_số, ...) { ... } - Dùng
voidkhi hàm không trả về giá trị - Hàm cần được khai báo (prototype) trước khi dùng nếu định nghĩa nằm sau nơi gọi nó trong code