1/ Tham số và đối số

Cú pháp khai báo hàm với tham số

kieu_du_lieu tenHam(kieu_du_lieu_1 tham_so_1, kieu_du_lieu_2 tham_so_2) {
  // đoạn mã cần thực thi
}
  • Cách đặt tên các tham số như tham_so_1, tham_so_2 giống như cách đặt tên biến mà các em đã học
  • Các em có thể truyền vào 1, 2, 3, 4, ... 100 tham số nếu như các em muốn
  • kieu_du_lieu_1, kieu_du_lieu_2: như int, string... mà các em đã học

Ví dụ

#include <iostream>
#include <string>
using namespace std;

void hocSinh(string ten, int tuoi) {
  cout << ten << "\t" << tuoi << "\n";
}

int main() {
  cout << "DANH SACH HOC SINH CUTE" << "\n";
  cout << "Ten" << "\t" << "Tuoi" << "\n";
  cout << "---oo0oo---\n";
  hocSinh("Mit", 12);
  hocSinh("Oi", 13);
  hocSinh("Xoai", 10);
  return 0;
}

Kết quả:

DANH SACH HOC SINH CUTE
Ten	Tuoi
---oo0oo---
Mit	12
Oi	13
Xoai	10

Khi một tham số được truyền cho hàm, lúc đó nó được gọi là một đối số. Vì vậy, từ ví dụ trên: ten, tuoi được gọi là các tham số, Mit, Oi, Xoai, 12, 13, 10 là các đối số. Các tham số được truyền vào phải đúng như thứ tự mà nó được khai báo ở hàm, như ví dụ trên thì các em phải truyền theo thứ tự là ten rồi mới đến tuoi.

2/ Giá trị tham số mặc định

Các em có thể sử dụng giá trị tham số mặc định bằng cách sử dụng dấu bằng =
Nếu các em gọi hàm mà không có đối số truyền vào, nó sẽ sử dụng giá trị mặc định, ví dụ

#include <iostream>
#include <string>
using namespace std;

void hocSinh(string ten = "Dua Leo", int tuoi = 18) {
  cout << ten << "\t" << tuoi << "\n";
}

int main() {
  hocSinh(); // ket qua: Dua Leo	18
  hocSinh("Bap", 10); // ket qua: Bap	10
  return 0;
}

Giá trị mặc định ở đây là Dua Leo18

3/ Giá trị trả về

Từ khóa void, được sử dụng trong các ví dụ trước, có nghĩa là hàm không có giá trị trả về. Nếu các em muốn hàm trả về một giá trị, các em có thể sử dụng kiểu dữ liệu như int, string... thay vì void và sử dụng từ khóa return bên trong hàm.

Ví dụ

#include <iostream>
#include <string>
using namespace std;

int mayTinh(int x, int y) {
  return x + y;
}

int main() {
  int tong = mayTinh(2, 6);
  cout << "Tong cua hai 2 va 6: " << tong << "\n";
  cout << "Tong cua hai 8 va 4: " << mayTinh(8, 4) << "\n";
  return 0;
}

Kết quả:

Tong cua hai 2 va 6: 8
Tong cua hai 8 va 4: 12

Trong ví dụ trên, int là kiểu dữ liệu trả về của hàm mayTinh, giá trị trả về là x + y cũng phải đảm bảo là kiểu int. Tương tự cho các kiểu dữ liệu trả về khác.

4/ Tham số là Tham chiếu

Trong các ví dụ ở trước, chúng ta đã sử dụng các biến bình thường khi truyền vào các tham số cho một hàm. Các em cũng có thể truyền một tham chiếu & vào hàm (chúng ta đã học về tham chiếu ở bài "Tham chiếu và con trỏ").

Ví dụ

#include <iostream>
using namespace std;

void hoanDoiGiaTri(int &x, int &y) {
  int z = x;
  x = y;
  y = z;
}

int main() {
  int so1 = 4;
  int so2 = 8;

  cout << "Truoc khi hoan doi: " << "\n";
  cout << so1 << so2 << "\n";

  hoanDoiGiaTri(so1, so2);

  cout << "Sau khi hoan doi: " << "\n";
  cout << so1 << so2 << "\n";

  return 0;
}

Kết quả:

Truoc khi hoan doi: 
48
Sau khi hoan doi: 
84

Trong ví dụ trên, khi truyền hai đối số so1so2 vào hàm hoanDoiGiaTri, thì xy lúc này chỉ là tham chiếu đến so1so2

5/ Tham số là Mảng

Tham số của hàm cũng có thể là một mảng.

Ví dụ

#include <iostream>  
using namespace std;  

void vuonTraiCay(string traiCay[4]) {
  for (int i = 0; i < 4; i++) {  
    cout << traiCay[i] << "\n";    
  } 
}

int main() {  
  string traiCay[4] = {"Mit", "Oi", "Xoai", "Chuoi"};  
  vuonTraiCay(traiCay);
  return 0;
}  

Kết quả:

Mit
Oi
Xoai
Chuoi