Hàm trong C++
Chia code thành các khối tái sử dụng: khai báo, định nghĩa và gọi hàm với tham số, giá trị trả về và nạp chồng.
Bài thứ tư trong loạt C++ cơ bản. Hàm cho phép bạn đặt tên cho một khối code, cung cấp đầu vào, và gọi nó từ bất kỳ đâu — công cụ cốt lõi để tổ chức mọi chương trình.
Vì sao dùng hàm?#
Hàm giúp code tái sử dụng, dễ kiểm thử và dễ đọc. Thay vì sao chép cùng một logic, bạn viết một lần và gọi nhiều lần.
Hàm đầu tiên#
#include <iostream>
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(3, 4);
std::cout << result << '\n'; // in ra 7
}cppadd nhận hai tham số int và trả về int. Giá trị 3 và 4 là đối số.
Kiểu trả về và void#
Nếu hàm không trả về giá trị, kiểu trả về là void:
void greet(std::string name) {
std::cout << "Hello, " << name << "!\n";
}cppKhai báo trước#
Để gọi hàm trước định nghĩa — ví dụ khi tách code thành nhiều file — hãy khai báo trước:
int multiply(int x, int y); // khai báo
int main() {
std::cout << multiply(6, 7) << '\n';
}
int multiply(int x, int y) { // định nghĩa
return x * y;
}cppKhai báo phải khớp chính xác với định nghĩa.
Tham số truyền theo giá trị#
Mặc định, C++ sao chép đối số vào tham số. Thay đổi bên trong hàm không ảnh hưởng người gọi:
void increment(int x) {
++x;
}
int main() {
int a = 5;
increment(a);
std::cout << a << '\n'; // vẫn là 5
}cppĐể sửa biến của người gọi, truyền tham chiếu — sẽ trình bày ở bài sau.
Đối số mặc định#
Tham số có thể có giá trị mặc định:
void print(std::string msg, int times = 1) {
for (int i = 0; i < times; ++i) {
std::cout << msg << '\n';
}
}
print("hi"); // in một lần
print("hi", 3); // in ba lầncppNạp chồng#
Hai hàm có thể trùng tên nếu danh sách tham số khác nhau:
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }cppTrình biên dịch chọn đúng hàm dựa trên kiểu đối số.
Kết luận#
Hàm là khối xây dựng của chương trình C++: khai báo, định nghĩa, gọi và tái sử dụng. Bài tiếp theo trong loạt: con trỏ và tham chiếu.