Thứ Năm, 27 tháng 7, 2017

[C++] Bài 6: Hàm trong C++

1. Định nghĩa hàm

      Hàm là "cái thứ" mà  ta bắt buộc phải sự dụng trong lập trình C++. Ta sử dụng hàm trong mọi chương trình C++ từ lớn đến bé và cái hàm kinh điển nhất mà ta luôn nhìn thấy nó đó là hàm main(). Hàm mai() là hàm chính của chương trình C++ (như đúng cái tên của nó), tại đây ta thực hiện mọi câu lệnh, các phép toán,..., và mỗi chương trình C++ chỉ có duy nhất một hàm main(). Trong hamf mai() ta có thể khai báo các hàm khác hoặc thực hiện các hàm đã được khai báo.
       Một hàm được định nghĩa là một chuỗi các câu lệnh có thể được sử dụng lại và được thiết kế bởi lập trình viên để thực hiện một mục đích nhất định. Một chương trình có thể có 1 hàm chính - hàm main(), hoặc có nhiều hơn một hàm.
        Hàm có thể trả về một giá trị hoặc không trả về gì cả (trừ hàm main). Các câu lệnh trong hàm sẽ thực hiện khi chúng ta gọi đến các hàm đó, nói cách khác, hàm là thứ mà luôn "chầu chực" để được ta gọi đến và sử dụng ^^

2. Khai báo và sử dụng hàm


* Cú pháp khai báo hàm
Để khai báo một hàm ta sử dụng cú pháp như sau:
<data type> function_name (variables)
{
        /*Your code here*/
}
+ Phần <data type> là kiểu dữ liệu trả về của hàm (int, double, float, char,etc.), nếu không trả về gì cả ta chọn kiểu dữ liệu là void.
+ Phần function_name là tên hàm. Chú ý, tên hàm không bao gồm dấu cách, ký tự đặc biệt (trừ dấu gạch dưới "_") và không bắt đầu bằng số, tên hàm không được trùng với các từ khoá dựng sẵn trong C++.
+ Phần variables là phần chứa các tham số của hàm. Một hàm có thể có hoặc không có tham số nào cả, khi định nghĩa có bao nhiêu tham số thì khi gọi tương ứng phải có bấy nhiêu biến.
Ví dụ:
/* Đây là hàm in ra câu "Hello, World!"
Hàm này không trả về gì cả*/
void print_hello()
{
        std::cout <<"Hello, World!\n";
}

/*Đây là hàm tính bình phương của một số
Hàm này trả về giá trị bình phương của biến*/
int square(int x)
{
        int y = x*x;
        return y;
}

* Sử dụng hàm
       Tham số của hàm là một biến được sử dụng trong hàm nơi mà giá trị sẽ được cung cấp vào khi gọi hàm, nói cách khác, tham số của hàm chính là phần chúng ta khai báo trong dấu ngoặc đơn và chúng ta có thể khai báo không, một hoặc nhiều tham số thông ngăn cách với nhau bởi dấu phẩy.
Ví dụ:
void Print_hello()
{
       //Hàm không tham số
}
int square(int x)
{
       //Hàm có một tham số
}
double area(int x, int y)
{
       //Hàm có 2 tham số
}
     
       Arguments (mình cũng không biết dịch sang tiếng Việt nó gọi là gì :) ) là một giá trị được truyền vào trong hàm khi ta gọi hàm.
Ví dụ:
int main()
{
        double x = area(5, 7); //gán biến x có giá trị bằng giá trị của hàm area tại x = 5, y = 7; 5,t là arguments
}

3. Các cách truyền arguments cho hàm

Chúng ta nói đến các cách truyền argument cho hàm như sau:
* Truyền bằng giá trị (Passing by Value)
        Thông thường, mặc định trong C++, argument được truyền vào hàm bởi giá trị. Khi được truyền vào bằng giá trị, giá trị của argument sẽ được copy vào trong tham số của hàm.
Ví dụ:
int square(int x)
{
       return x*x;
}
int main()
{
       std::cout << square(5); //25
       int n = 6;
       std::cout << square(x); //36
}

* Truyền bằng con trỏ (Passing by Pointer)
       Ta sử dụng một con trỏ đề đưa địa chỉ của biến vào trong tham số. Phần này sẽ được nhắc lại sau khi ta học con trỏ và tham chiếu.
* Truyền bằng tham chiếu (Passing by Reference)
       Ta sử dụng một tham chiếu để đưa địa chỉ của biến vào trong tham số. Phần này sẽ được nhắc lại sau khi ta học con trỏ và tham chiếu.

4. Nạp chồng hàm

       Nạp chồng hàm là một feature (một đặc trưng) của C++ mà chúng ta có thể tạo nhiều hàm với cùng tên miễn là chúng khác nhau về tham số, kiểu dữ liệu,etc.
Ví dụ:
int add(int x, int y)
{
       return x + y;
}

double add(double x, double y)
{
       return x + y;
}


5. Bài tập ví dụ:

Viết một chương trình C++ sử dụng hàm để tính chu vi và diện tích của một hình chữ nhật

#include <iostream>
void Rectangle(int x, int y)
{
    std::cout << "The Perimeter of Rectangle is: " << 2*(x+y) << std::endl;
    std::cout << "The area of Rectangle is: "<< x*y << std::endl;
}
int main()
{
    Rectangle(3,5);
}

Kết quả sau khi compile:





0 nhận xét:

Đăng nhận xét