Chuyển đến nội dung chính

Hàm Trong C++

Trong lập trình, thì hàm hay function là một tập hợp các câu lệnh được nhóm lại để thực hiện một nhiệm vụ cụ thể. Hàm giúp tổ chức code tốt hơn, tái sử dụng dễ dàng và làm cho đoạn code dễ đọc hơn.

Quá trình gọi hàm trong C++

Trong C++ khi một hàm được gọi, hệ thống sẽ thực hiện qua các bước sau:
Lưu trạng thái hiện tại: Các giá trị của thanh ghi và biến cục bộ được lưu lại để đảm bảo chương trình có thể quay lại trạng thái ban đầu sau khi hàm kết thúc.
Chuyển quyền điều khiển: Bộ xử lý nhảy đến địa chỉ của hàm được gọi.
Thực thi mã nguồn của hàm: Các lệnh trong hàm được thực thi.
Trả về kết quả (nếu có): Nếu hàm có giá trị trả về, kết quả được lưu vào thanh ghi hoặc bộ nhớ.
Quay lại vị trí gọi: Bộ xử lý quay lại vị trí ban đàu trong chương trình.

Khai báo một hàm trong C++

return_type function_name(parameter_1, parameter_2,...){
    // Code thực thi
    return value;	// Giá trị trả về
}

return_type: Kiểu dữ liệu mà hàm sẽ trả về (int, double, void).
function_name: Tên của hàm, tuân theo quy tắc đặt tên biến.
parameter: Các tham số đầu vào của hàm (có thể có hoặc không).
return value: Giá trị trả về (nếu có).

Các hàm cơ bản trong C++

Hàm main

Hàm main() hay còn gọi là hàm chính, là điểm bắt đầu của mọi chương trình trong C++. Khi chương trình chạy, hệ thống sẽ gọi hàm main này đầu tiên.

Ví dụ về hàm main

int main(){
    std::cout << "Hello world!" << std::endl;
    return 0;
}

Biến thể của hàm main

Hàm main sử dụng có hai dạng, dạng không tham số và dạng có tham số. Dạng không tham số sẽ giống như như ví dụ phía trên, dạng có tham số thì sẽ có tham số tham gia vào.

Ví dụ hàm main có tham số

int main(int argc, char* argv[]) {
    std::cout << "Số tham số: " << argc << std::endl;
    return 0;
}
// argc: Số lượng tham số dòng lệnh
// argv[]: Mảng chứa các tham số dòng lệnh

Một số lưu ý về hàm main()
Hàm main() phải luôn luôn có kiểu trả về là int để báo hiệu trạng thái kết thúc của chương trình.
Trong một số trình biên dịch, có thể sử dụng void main(), nhưng không được khuyến khích vì không theo chuẩn C++.
Giá trị trả về của main() thường là 0 nghĩa là thành công, hoặc một giá trị nào đó khác 0, lớn hơn 0 thường báo hiệu một loại lỗi cụ thể, bé hơn 0 thường báo các lỗi nghiêm trọng. Ngoài ra hệ điều hành còn sử dụng giá trị trả về để xác định trạng thái của chương trình.

Hàm có giá trị trả về

Hàm có giá trị trả về giúp ta thực hiện một công việc cụ thể và trả lại kết quả sau khi đã hoàn thành công việc đó.

Ví dụ về hàm có giá trị trả về:

// Viết một hàm tính tổng của hai số a và b cho trước
int sum(int a, int b) {
    return a + b;
}

// Gọi hàm chính để chạy chương trình
int main(){
    int x = 5;
    int y = 10;
    std::cout << "Tổng của hai số a và b là: " << sum(x,y) << std::endl;
    return 0;
}

// Output:
// Tổng của hai số a và b là: 15

Hàm không có giá trị trả về

Hàm không có giá trị trả về trong C++ là hàm có kiểu trả về (return type) là void. Chúng không trả về bất kì giá trị nào sau khi thực thi mà chỉ thực hiện một nhiệm vụ cụ thể.

Ví dụ hàm không có giá trị trả về

void hello(string name){
    std::cout << "hello " << name << std::endl;
}

int main(){
    string name;
    std::cout << "Nhập tên bạn vào: ";
    std::cin >> name;
    hello(name);
    return 0;
}

// Output:
// Nhập tên bạn vào: hung
// hello hung

Hàm đệ quy

Hàm đệ quy trong C++ là một hàm có khả năng gọi lại chính nó để giải quyết bài toán. Đây là một kỹ thuật quan trọng trong lập trình, giúp đơn giản hóa các vấn đề có tính chất lặp lại.

Cấu trúc hàm đệ quy

return_type function_name(parameters) {
	if (Điều_kiện_dừng){
    	return giá_trị;
    }
    return function_name(tham_số_mới);
}

Điều kiện dừng: Rất quan trọng để tránh vòng lặp vô hạn.
Gọi lại chính nó: Hàm sẻ tiếp tục chạy cho đến khi đạt điều kiện dừng.

Ví dụ về hàm đệ quy

// Tính giai thừa của một số:
int factorial(int n){
    if (n == 0) return 1;	// Điều kiện dừng
    return n* factorial(n - 1);	// Gọi lại chính nó
}

int main(){
    std::cout << "Giai thừa của 5 là: " << factorial(5) << std::endl;
    return 0;
}

// Output:
// Giai thừa của 5 là: 120

Các loại hàm đệ quy:
Đệ quy trực tiếp: Hàm gọi lại chính nó.
Đệ quy gián tiếp: Một hàm gọi một hàm khác, và cuối cùng quay lại gọi chính nó.
Đệ quy tuyến tính: Chỉ có một lời gọi đệ quy trong mỗi lần thực thi.
Đệ quy nhị phân: Có hai lời gọi đệ quy trong mỗi lần thực thi.

Ưu điểm hàm đệ quy:
Giúp mã nguồn ngắn gọn.
Giải quyết tốt bài toán có tính lặp lại.

Nhược điểm:
Có thể gây tràn bộ nhớ (stack overflow) nếu không có điều kiện dừng.
Hiệu suất thấp hơn so với vòng lặp trong một số trường hợp.

Kết Luận

Hàm là một thành phần quan trọng trong lập trình, giúp tổ chức mã nguồn một cách hiệu quả, tái sử dụng dễ dàng và làm cho chương trình dễ hiểu hơn. Chúng cho phép lập trình viên chia nhỏ các tác vụ phức tạp thành các phần nhỏ hơn, giúp cải thiện khả năng bảo trì và mở rộng chương trình.

Nhận xét

Bài đăng phổ biến từ blog này

Biến Trong Lập Trình C++

Trong lập trình, biến (variable) có thể hiểu là một công cụ dùng để chứa dữ liệu, khi ta đặt một biến thì một vùng nhớ trên RAM sẽ được cấp cho biến đó, chương trình có thể sử dụng, thay đổi hoặc lưu dữ liệu trên vùng nhớ này, cho nên giá trị của biển có thể được thay đổi trong suốt quá trình thực thi chương trình. Mỗi biến sẽ được gán một tên (identifier) để coder có thể sử dụng và thao tác với dữ liệu trong đó.

Toán Tử Trong C++

Trong C++, toán tử là các ký hiệu dùng để thực hiện các phép toán với biến.

Tạo Usb Boot Cài Đặt Windows 11 Bằng Windows Media Creation Tool

USB boot Windows là một thiết bị lưu trữ USB được tạo để chứa hệ điều hành Windows, cho phép bạn khởi động và cài đặt Windows trên máy tính.