Cách tạo và sử dụng hàm trong C++

Giả sử trong chương trình chúng ta có đoạn code tính tổng hai số nguyên như sau:

Ví dụ
#include <iostream>
using namespace std;
int main()
{
   int a = 5;
   int b = 10;
   int c = a + b;
   cout << c << " + " << b << " = " << c << endl;
   return 0;
}

Nếu chúng ta muốn tính tổng 2 số nguyên ở nhiều nơi trong chương trình thì sao? Có phải chúng ta sẽ coppy đoạn code trên và dán lại ngay chổ chúng ta cần tính tổng. Như vậy chương trình chúng ta sẽ trở nên dài hơn và code bị trùng lặp lại rất nhiều.

Để giải quyết vấn đề trên, trong C++ có hỗ trợ hàm (function) cho chúng ta có thể sử dụng lại đoạn code mà không cần phải coppy code và dán lại.

Vậy hàm trong C++ là gì? Chúng ta sẽ tìm hiểu trong nội dung sau đây nhé!

1. Hàm trong C++

Hàm (Function) trong C++ là tập hợp nhiều câu lệnh để thực hiện một chức năng cụ thể nào đó. Hàm có thể được gọi lại ở nhiều nơi khác nhau trong chương trình.

Sau đây là một cấu trúc định nghĩa hàm trong C++.

Cú pháp
return_type function_name( parameter list ) {
   statement(s);
}

Trong đó:

  • return_type: kiểu dữ liệu của giá trị mà hàm sẽ trả về. Có thể là kiểu số như là 1, 2, 3,4 .. hoặc kiểu chuỗi như "Nguyen Van A", "Nguyen Van B" ... Tuy nhiên có một số hàm sẽ không có trả về giá trị nào, chúng ta có thể khai báo return_type là void.
  • function_name: là tên hàm
  • parameter list: tham số của hàm. Khi gọi hàm chúng ta sẽ truyền giá trị thật sự vào các tham số của hàm, lúc này ta gọi đó là tham số thực tế. Còn khi định nghĩa hàm thì các tham số này được gọi là tham số hình thức. Tham số của hàm không bắt buộc phải có. Một hàm có thể không có tham số nào.
  • statement(s): các câu lệnh bên trong thân hàm nhằm thực hiện cho một chức năng cụ thể nào đó. chúng ta có thể định nghĩa hàm mà không có câu lệnh nào bên trong thân hàm, tuy nhiên không khuyến khích các bạn tạo những hàm như vậy, một hàm được tạo ra nên có mục đích sử dụng nhất định.

2. Ưu điểm của hàm

Hàm (Function) trong C++ có nhiều ưu điểm như sau:

  • Tái sử dụng lại code: Một hàm được tạo trong C++, chúng ta có thể gọi lại hàm nhiều lần mà không cần phải viết lại đoạn code trùng nhau nhiều lần.
  • Tối ưu code: Nó làm cho chương trình chúng ta ngắn gọn và tối ưu. Vì chương trình chúng ta không có nhiều đoạn code trùng lặp nhau.
  • Dể đọc và dể bảo trì: Nó làm cho chương trình chúng ta rõ ràng và dễ hiểu, rất tiện lợi cho việc bảo trì chương trình sau này.

3. Các loại hàm trong C++

Trong C++ có 2 loại hàm đó là:

  • Hàm định nghĩa sẳn hay còn gọi là thư viện hàm: Đó là những hàm được dựng sẳn trong C++ chúng ta chỉ cần khai báo thư viện và sử dụng.
  • Hàm do người dùng tự định nghĩa: Đó là hàm do người lập trình viên định nghĩa theo mục đích sử dụng nhất định.

Trong nội dung bài học hôm nay chúng ta chỉ tìm hiểu về hàm do người dụng định nghĩa. Hàm dựng sẳn thì chúng ta sẽ tìm hiểu trong một bài khác.

4. Ví dụ hàm trong C++

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

Trong C++ hàm không có giá trị nào trả về ta sử dụng void. Ví dụ một hàm đơn giản là xuất ra màn hình câu chào như sau:

Ví dụ
#include <iostream>
using namespace std;

void Show() {
    cout << "Xin chao cac ban den voi freetuts.net" << endl;
}

int main()
{
    Show();
    return 0;
}

Và kết quả sau khi thực thi đoạn code trên:

Hàm có kiểu trả về

Trong C++, một hàm thường có kiểu trả về cụ thể như int, float ... Ví dụ đơn giản về hàm có kiểu trả về là tính tổng, hiệu và tích của 2 số nguyên như sau:

Ví dụ
#include <iostream>
using namespace std;
int Tong(int a, int b) {
    return a + b;
}
int Hieu(int a, int b) {
    return a - b;
}
int Nhan(int a, int b) {
    return a*b;
}
int main()
{
    int a = 5;
    int b = 6;
    cout << a << " + " << b << " = " << a + b << endl;
    cout << a << " - " << b << " = " << a + b << endl;
    cout << a << " x " << b << " = " << a + b << endl;
    return 0;
}

Và kết quả sau khi thực thi đoạn code trên:

Hàm không có tham số

Trong C++ hàm được định nghĩa không có tham số nào chúng ta gọi đó là hàm không có tham số. Ví dụ như sau:

Ví dụ
#include <iostream>
using namespace std;

void Show() {
    cout << "Xin chao cac ban den voi freetuts.net" << endl;
    cout << "Day la ham khong co tham so";
}

int main()
{
    Show();
    return 0;
}

Và kết quả sau khi thực thi đoạn code trên:

Hàm có tham số

Chúng ta cùng xem một ví dụ đơn giản về hàm có tham số trong C++ đó là in ra màn hình tổng 2 số nguyên.

Ví dụ
#include <iostream>
using namespace std;

void tong(int a, int b) {
    cout << a << " + " << b << " = " << a + b << endl;
}

int main()
{
   int a = 10;
   int b = 5;
   int c = 3;
   int d = 7;
   tong(a,b);
   tong(c,d);
   tong(b,c);
   tong(a,d);
   return 0;
}

Và kết quả sau khi thực thi đoạn code trên như sau:

5. Giá trị mặc nhiên của tham số hàm

Trong C++ cho phép chúng ta định nghĩa giá trị mặc nhiên của tham số. Khi truyền giá trị thực tế cho tham số thì nó sẽ lấy giá trị truyền vào, khi không truyền tham số vào thì nó sẽ lấy giá trị mặc nhiên.

Như ở ví dụ sau chúng ta định nghĩa hàm Tong có 2 tham số đó là a, b, chúng ta sử dụng giá trị mặc nhiên cho tham số a là 10, tham số b là 15. 

Ví dụ
#include <iostream>
using namespace std;

void tong(int a = 10, int b = 15) {
    cout << "  " << a << " + " << b << " = " << a + b << endl;
}

int main()
{
    int a = 20;
    int b = 40;
    cout << "Truyen 2 tham so day du: a = " << a << ", b = " << b << endl;
    tong(a, b);
    cout << "Truyen tham so thu nhat: a = " << a << endl;
    tong(a);
    cout << "Khong truyen tham so nao" << endl;
    tong();

    return 0;
}

Và kết quả sau khi thực thi đoạn code trên như sau:

Giá trị mặc nhiên của tham số phải được khai báo theo tứ tự từ bên phải cùng qua trái, khai báo như các trường hợp sau khi biên dịch sẽ ra lỗi.

Ví dụ hàm chúng ta có 3 tham số, chúng ta chỉ để giá trị mặc nhiên cho tham số thứ 1 và thứ 2.

Ví dụ
#include <iostream>
using namespace std;

void tong(int a = 10, int b=5, int c) {
    cout << "tham so thu 1: " << a << endl;
    cout << "tham so thu 2: " << b << endl;
    cout << "tham so thu 3: " << c << endl;
    cout << "Tong: " << a+b+c << endl << endl;
}

int main()
{
    int a = 1;
    int b = 2;
    int c = 3;
   
    tong(a, b, c);
    tong(a,b);
    tong(a);

    return 0;
}

Và sau khi thực thi đoạn code trên sẽ báo lỗi như sau:

Ví dụ hàm chúng ta có 3 tham số, nhưng chúng ta chỉ để giá trị mặc nhiên cho tham số thứ 1

Ví dụ
#include <iostream>
using namespace std;

void tong(int a = 10, int b, int c) {
    cout << "tham so thu 1: " << a << endl;
    cout << "tham so thu 2: " << b << endl;
    cout << "tham so thu 3: " << c << endl;
    cout << "Tong: " << a+b+c << endl << endl;
}

int main()
{
    int a = 1;
    int b = 2;
    int c = 3;
   
    tong(a, b, c);
    tong(a,b);
    tong(a);

    return 0;
}

Và kết quả sau khi thực thi đoạn code trên sẽ ra lỗi biên dịch sau:

Như vậy giá trị mặc nhiên chỉ được khai báo cho các tham số theo thứ tự ngoài cùng bên phải đi vào.

Ở ví dụ trên sử dụng các giá trị mặc nhiên cho tham số như sau mới là hợp lệ:

  • chỉ sử dụng giá trị mặc nhiên cho tham số thứ 3
  • sử dụng giá trị mặc nhiên cho tham số thứ 2, và tham số thứ 3
  • sử dụng giá trị mặc nhiên cho cả 3 tham số 1, 2, 3

6. Kết luận

Vậy là chúng ta đã tìm hiểu xong về hàm trong C++ hay còn gọi là function trong C++. Ở bài chúng ta chỉ cần nắm một số nội dung như cách định nghĩa hàm, một hàm được định nghĩa gồm có kiểu trả về, tên hàm, các tham số của hàm, kiểu dữ liệu của tham số hàm và thân hàm.

Cách sử dụng giá trị mặc nhiên cho tham số hàm đó là phải định nghĩa giá trị mặc nhiên cho tham số theo thứ tự từ phía bên phải đi qua trái.

Như vậy là mình kết thúc bài học về hàm trong C++ tại đây. Trong bài tiếp theo chúng ta sẽ cùng tìm hiểu về cách gọi hàm bằng giá trị hoặc tham chiếu. Các bạn nhớ theo dõi nhé.

Khóa học nên xem

Nguồn: freetuts.net