Bỏ qua để đến nội dung

Định nghĩa - tạo một hàm

#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;
}

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”.

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;
}
  • Cú pháp: kiểu_trả_về tên_hàm(kiểu tham_số, ...) { ... }
  • Dùng void khi 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