Cách viết hàm và cách gọi hàm trong C++ (function)

Trong bài này mình sẽ hướng dẫn cách viết hàm trong C++, qua bài học bạn sẽ hiểu khái niệm hàm là gì, cũng như cách gọi hàm trong C++ đầy đủ nhất.

test php

banquyen png

Bài viết này được đăng tại

freetuts.net

, không được copy dưới mọi hình thức.

Hàm là một tính năng rất quan trọng trong hầu hết các ngôn từ lập trình, nó giúp lập trình viên tạo ra những đoạn code có tính thừa kế, giúp việc tăng trưởng và bảo dưỡng thuận tiện hơn. Vậy hàm là gì ? Tại sao nên sử dụng hàm thì tất cả chúng ta cùng tìm hiểu và khám phá ngay nhé .

1. Tại sao sử dụng hàm trong C++?

Để biết tại sao sử dụng hàm thì hãy khởi đầu bằng một ví dụ. Giả sử trong chương trình tất cả chúng ta có đoạn code tính tổng hai số nguyên như sau :

Ví dụ

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

Nếu tất cả 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 tất cả chúng ta sẽ sao chép đoạn code trên và dán lại ngay chổ tất cả chúng ta cần tính tổng. Như vậy chương trình tất cả chúng ta sẽ trở nên dài hơn và code bị trùng lặp lại rất nhiều .
Để xử lý yếu tố trên thì trong C + + có tương hỗ hàm ( function ), được cho phép tất cả chúng ta hoàn toàn có thể sử dụng lại đoạn code mà không cần phải sao chép code và dán lại .

Trong C++ có rất nhiều hàm có sẵn, và các bạn cũng đã từng sử dụng rồi đấy, đó là hàm sizeof. Hàm này có công dụng là trả về kích thước của một biến dựa vào kiểu dữ liệu của biến đó.

2. Cú pháp khai báo hàm trong C++

Hàm trong C + + hay còn gọi là function, là tập hợp nhiều câu lệnh để thực thi một tính năng đơn cử nào đó. Hàm hoàn toàn 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);
   return value;
}

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, quy tắc đặt tên giống như biến vậy.
  • 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.
  • return là lệnh dùng để trả giá trị value về khi hàm này được gọi.

Ví dụ: Khai báo một hàm có tên là showMessage và không có tham số truyền vào.

int showMessage(){
    // lenh ben trong ham
    return 1;
}

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ách gọi hàm trong C++

Để gọi một hàm trong C + + thì ta sẽ gọi đến tên của hàm và truyền các tham số vào ( nếu có ) .

Ví dụ: Hàm sizeof() có một tham số truyền vào thì ta gọi như sau:

sizeof(ten_bien);

Nếu bạn gọi đến một hàm chưa được định nghĩa thì sẽ bị báo lỗi .
Để hiểu rõ hơn về cách gọi hàm trong C + + thì hãy tìm hiểu và khám phá ở các phần tiếp theo .

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

fuction type JPG

Trong nội dung bài học kinh nghiệm ngày hôm nay tất cả chúng ta chỉ khám phá về hàm do người dụng định nghĩa. Hàm dựng sẳn thì tất cả chúng ta sẽ tìm hiểu và khám phá trong một bài khác .
Tuy nhiên, trong thực tiễn thì đó không phải là loại hàm nhé các bạn, mà nó chỉ là cách tất cả chúng ta chia ra để phân biệt mà thôi .

Hàm C++ có hai loại chuẩn như sau:

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

Đây là loại hàm không có sử dụng lệnh return và kiểu dữ liệu khai báo cho hàm là void, thường được dùng trong trường hợp bạn muốn xử lý dữ liệu ngay bên trong hàm đó.

Cú pháp như sau :

void functionName(parameter){
	// statements
}

Ví dụ: Bạn cần viết một hàm C++ dùng để hiển thị dữ liệu lên màn thình thì có thể sử dụng loại hàm này.

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

Đây là loại hàm có sử dụng lệnh return và có kiểu dữ liệu trả về khác void, thường được dùng trong trường hợp bạn muốn hàm trả về một giá trị khi được gọi để xử lý tiếp trong chương trình.

Cú pháp loại hàm này như sau :

datatype function_name( parameter list ) {
   statement(s);
   return value;
}

Trong đó giá trị value phải có kiểu dữ liệu như lúc khai báo là datatype nhé.

Ví dụ: Viết chương trình tìm số lớn nhất trong ba số, sau đó lấy số lớn nhất đó để xử lý tiếp trong hàm main, lúc này bạn phải xây dựng hàm có giá trị trả về.

5. Cách viết hàm trong C++

Khi viết hàm chúng ta phải đặt nó bên ngoài hàm main nhé các bạn. Thường thì sẽ đặt phía trên hàm main hoặc viết ra một file riêng rồi gọi vào. Sau đây là một số trường hợp cụ thể.

Cách viết hàm C++ không trả về giá trị

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

Ví dụ

#include 
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:

function ex4 JPG

Cách viết hàm C++ có giá trị trả về

Trong C + +, một hàm thường có kiểu trả về đơn cử như int, float … Ví dụ đơn thuầ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 
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 << " = " << Tong(a, b) << endl;
    cout << a << " - " << b << " = " << Hieu(a, b) << endl;
    cout << a << " x " << b << " = " << Nhan(a, b) << endl;
    return 0;
}

Và hiệu quả sau khi thực thi đoạn code trên :

function ex3 JPG

Cách viết hàm C++ không có tham số

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

Ví dụ

#include 
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à tác dụng sau khi thực thi đoạn code trên :

function ex5 JPG

Cách viết hàm C + + có tham số

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

Ví dụ

#include 
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à tác dụng sau khi thực thi đoạn code trên như sau :

function ex JPG

6. Giá trị mặc định của tham số hàm trong C++

Trong C + +, hàm được cho phép tất cả chúng ta định nghĩa giá trị mặc nhiên của tham số. Khi truyền giá trị trong thực tiễn 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 định .

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 định cho tham số a là 10, tham số b là 15.

Ví dụ

#include 
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à hiệu quả sau khi thực thi đoạn code trên như sau :

function ex1 JPG

Giá trị mặc định 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 tất cả chúng ta có 3 tham số, tất cả chúng ta chỉ để giá trị mặc nhiên cho tham số thứ 1 và thứ 2 .

Ví dụ

#include 
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 :

function err JPG

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

Ví dụ

#include 
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à hiệu quả sau khi thực thi đoạn code trên sẽ ra lỗi biên dịch sau :

function err1 JPG

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

7. Kết luận

Vậy là tất cả chúng ta đã khám phá xong về hàm trong C + +, hay còn gọi là function trong C + +. Ở bài này tất cả chúng ta chỉ cần nắm một số ít 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 tài liệu của tham số hàm và thân hàm .
Mình xin kết thúc bài học kinh nghiệm về hàm C + + tại đây. Trong bài tiếp theo tất cả chúng ta sẽ cùng tìm hiểu và khám phá về cách gọi hàm bằng giá trị hoặc tham chiếu .