C++ Các hàm với các ví dụ về chương trình

⚡ Tóm tắt thông minh

Các chức năng trong C++ Gom các câu lệnh liên quan thành các khối có tên có thể tái sử dụng, nhận đầu vào, xử lý và trả về đầu ra. Chương trình kết hợp các hàm thư viện tích hợp sẵn và các hàm do người dùng định nghĩa, mỗi hàm được khai báo, định nghĩa và gọi để tránh lặp lại mã.

  • 🧩 Những gì nó là: Một hàm nhóm các câu lệnh nhận tham số, xử lý chúng và trả về một giá trị, thực hiện một tác vụ chung từ một khối lệnh duy nhất.
  • 📚 Chức năng tích hợp sẵn: C++ Thư viện chuẩn cung cấp sẵn các hàm như sqrt() mà bạn có thể gọi trực tiếp mà không cần tự viết mã.
  • 🛠️ Các hàm do người dùng định nghĩa: Lập trình viên tự tạo ra các hàm của riêng mình, đặt tên duy nhất cho chúng và gọi đoạn mã đó từ bất kỳ đâu trong chương trình.
  • 📝 Tuyên bố và định nghĩa: Nguyên mẫu khai báo kiểu trả về, tên và kiểu tham số; phần định nghĩa cung cấp thân hàm.
  • 📞 Lời kêu gọi và lập luận: Việc gọi một hàm sẽ thực thi phần thân của hàm đó; các đối số phải khớp với các tham số về số lượng và kiểu dữ liệu, và cho phép sử dụng giá trị mặc định.
  • 🤖 Hỗ trợ AI: GitHub Copilot và các công cụ hỗ trợ tương tự tạo khung sườn. C++ Chữ ký hàm, thân hàm và các lời gọi hàm từ một đoạn chú thích ngắn.

C++ Chức năng

Chức năng trong C++?

Một chức năng trong C++ đề cập đến một nhóm các câu lệnh nhận đầu vào, xử lý nó và trả về đầu ra. Ý tưởng đằng sau một hàm là kết hợp các nhiệm vụ phổ biến được thực hiện lặp đi lặp lại. Nếu bạn có đầu vào khác nhau, bạn sẽ không viết lại cùng một mã. Bạn chỉ cần gọi hàm với một tập dữ liệu khác gọi là tham số.

Mỗi trang web C++ chương trình có ít nhất một hàm, hàm main(). Bạn có thể chia mã của mình thành các chức năng khác nhau. Sự phân chia này phải sao cho mỗi chức năng thực hiện một nhiệm vụ cụ thể.

Có rất nhiều chức năng tích hợp trong C++ thư viện chuẩn. Bạn có thể gọi các hàm này trong chương trình của mình.

Tại sao nên sử dụng chức năng?

Có rất nhiều lợi ích liên quan đến việc sử dụng các chức năng. Bao gồm các:

  • Mỗi chức năng đặt mã liên quan với nhau. Điều này giúp các lập trình viên hiểu mã dễ dàng hơn.
  • Các hàm giúp lập trình dễ dàng hơn bằng cách loại bỏ sự lặp lại mã.
  • Các chức năng tạo điều kiện cho việc tái sử dụng mã. Bạn có thể gọi cùng một hàm để thực hiện một tác vụ ở các phần khác nhau của chương trình hoặc thậm chí bên ngoài chương trình.

Chức năng tích hợp sẵn

In C++Các hàm thư viện được tích hợp sẵn. C++ chức năng. Để sử dụng các chức năng này, bạn chỉ cần gọi/gọi trực tiếp chúng. Bạn không cần phải tự mình viết các hàm.

Ví dụ 1:

#include <iostream>
#include <cmath>
using namespace std;
int main() {
	double num, squareRoot;
	cout << "Enter number: ";
	cin >> num;
	squareRoot = sqrt(num);
	cout << "The square root of " << num << " is: " << squareRoot;
	return 0;
}

Đầu ra:

Đầu ra của C++ Ví dụ về hàm sqrt() tích hợp sẵn

Đây là ảnh chụp màn hình của mã:

C++ đoạn mã gọi hàm sqrt() tích hợp sẵn từ thư viện cmath.

Code Giải thích:

  1. Bao gồm tệp tiêu đề iostream trong chương trình của chúng tôi để sử dụng các chức năng của nó.
  2. Bao gồm thư viện cmath để sử dụng các chức năng của nó. Chúng tôi muốn sử dụng hàm sqrt() được xác định trong đó.
  3. Bao gồm không gian tên std trong mã của chúng tôi để sử dụng các lớp của nó mà không cần gọi nó.
  4. Gọi hàm main(). Logic chương trình phải được thêm vào trong phần thân của hàm này.
  5. Khai báo hai biến double, num và squareRoot.
  6. In một số văn bản trên bảng điều khiển. Văn bản yêu cầu người dùng nhập một số.
  7. Đọc đầu vào của người dùng từ bàn phím. Đầu vào sẽ trở thành giá trị của biến num.
  8. Gọi hàm thư viện sqrt(), tính toán căn bậc hai của một số. Chúng ta truyền tham số num vào hàm, nghĩa là nó sẽ tính căn bậc hai của num. Hàm này được định nghĩa trong thư viện cmath.
  9. In số do người dùng nhập, căn bậc hai của nó và một số văn bản khác trên bảng điều khiển.
  10. Chương trình phải trả về giá trị sau khi hoàn thành thành công.
  11. Phần cuối của hàm main().

Chức năng do người dùng xác định

C++ cho phép các lập trình viên xác định các chức năng của riêng họ. Mục đích của hàm là nhóm các mã liên quan. Mã sau đó được cấp một mã định danh duy nhất, tên hàm.

Hàm này có thể được gọi/gọi từ bất kỳ phần nào khác của chương trình. Sau đó nó sẽ thực thi mã được xác định trong phần thân của nó.

Ví dụ 2:

#include <iostream>
using namespace std;

void sayHello() {
	cout << "Hello!";
}

int main() {

	sayHello();

	return 0;
}

Đầu ra:

Đầu ra của C++ hàm sayHello() do người dùng định nghĩa

Đây là ảnh chụp màn hình của mã:

C++ mã định nghĩa và gọi một hàm do người dùng định nghĩa.

Code Giải thích:

  1. Bao gồm tệp tiêu đề iostream trong chương trình của chúng tôi để sử dụng các chức năng của nó.
  2. Bao gồm không gian tên std trong mã của chúng tôi để sử dụng các lớp của nó mà không cần gọi nó.
  3. Tạo một hàm do người dùng định nghĩa có tên sayHello().
  4. In một số văn bản trên bảng điều khiển khi hàm sayHello() được gọi.
  5. Phần cuối của hàm sayHello().
  6. Gọi hàm main(). Logic chương trình phải được thêm vào trong phần thân của hàm này.
  7. Gọi/gọi hàm có tên sayHello().
  8. Chương trình phải trả về giá trị sau khi hoàn thành thành công.
  9. Phần cuối của hàm main().

Trình biên dịch phải biết một hàm trước khi nó được sử dụng.

Khai báo hàm/nguyên mẫu

Nếu bạn xác định một hàm do người dùng định nghĩa sau hàm main(), thì C++ trình biên dịch sẽ trả về lỗi. Lý do là trình biên dịch không biết chi tiết về hàm do người dùng định nghĩa. Chi tiết bao gồm tên, loại đối số và loại trả về của chúng.

In C++, khai báo/nguyên mẫu hàm khai báo một hàm không có phần thân. Điều này cung cấp cho trình biên dịch thông tin chi tiết về hàm do người dùng định nghĩa.

Trong phần khai báo/nguyên mẫu, chúng tôi bao gồm kiểu trả về, tên hàm và kiểu đối số. Tên của các đối số không được thêm vào. Tuy nhiên, việc thêm tên đối số sẽ không gây ra lỗi.

C++ sơ đồ cú pháp khai báo hàm/nguyên mẫu

Định nghĩa hàm

Mục đích của việc khai báo hàm là để cho biết C++ trình biên dịch về tên hàm, kiểu trả về và các tham số. Một định nghĩa hàm cho biết C++ trình biên dịch về thân hàm.

C++ sơ đồ cấu trúc định nghĩa hàm

cú pháp

return_datatype function_name( parameters) {
   function body 
}

Từ những điều trên, định nghĩa hàm có phần đầu và phần thân hàm. Dưới đây là giải thích về các tham số:

  • `return_datatype` - Một số hàm trả về giá trị. Tham số này chỉ định kiểu dữ liệu của giá trị trả về. Một số hàm không trả về giá trị. Trong trường hợp đó, giá trị của tham số này trở thành `void`.
  • function_name- Đây là tên của hàm. Tên hàm và các tham số tạo thành chữ ký hàm.
  • Tham số - Đây là kiểu dữ liệu, thứ tự và số lượng tham số của hàm. Một số hàm không có tham số.
  • Thân hàm - đây là các câu lệnh xác định hàm sẽ làm gì.

Gọi hàm

Để một hàm thực hiện tác vụ đã chỉ định và trả về kết quả đầu ra, nó phải được gọi. Khi bạn gọi một hàm, nó sẽ thực thi các câu lệnh được thêm vào trong phần thân của nó.

Hàm được gọi bằng tên của nó. Nếu hàm có tham số, giá trị của các tham số đó cần được truyền vào trong quá trình gọi hàm. Nếu hàm không có tham số, thì không cần truyền bất kỳ giá trị nào trong quá trình gọi hàm.

C++ sơ đồ cú pháp gọi hàm

Truyền đối số

In C++, đối số/tham số là dữ liệu được truyền đến một hàm trong quá trình gọi hàm đó. Các giá trị phải được khởi tạo cho các biến tương ứng của chúng.

Khi gọi một hàm, số lượng các tham số phải khớp nhau. Điều này có nghĩa là các giá trị bạn truyền vào phải bằng số lượng tham số. Tương tự, các giá trị cũng phải khớp với các tham số về kiểu dữ liệu. Nếu tham số đầu tiên là một số nguyên, thì giá trị được truyền vào cũng phải là một số nguyên.

Bạn có thể gán giá trị mặc định cho các tham số của hàm. Nếu bạn không truyền giá trị cho tham số trong quá trình gọi hàm, giá trị mặc định sẽ được sử dụng.

Ví dụ 3: Cách viết và gọi hàm

#include <iostream>
using namespace std;
int addFunc(int, int);
int main() {
	int x, y, sum;
	cout << "Enter two numbers: ";
	cin >> x >> y;
	sum = addFunc(x, y);
	cout <<"The sum of "<<x<< " and " <<y<<" is: "<<sum;
	return 0;
}
int addFunc(int num1, int num2) {
	int addFunc;
	addFunc = num1 + num2;
	return addFunc;
}

Đầu ra:

Đầu ra của C++ Hàm addFunc() trả về tổng

Đây là ảnh chụp màn hình của mã:

C++ Đoạn mã truyền các tham số cho hàm addFunc()

Code Giải thích:

  1. Bao gồm tệp tiêu đề iostream trong chương trình của chúng tôi để sử dụng các chức năng của nó.
  2. Bao gồm không gian tên std trong mã của chúng tôi để sử dụng các lớp của nó mà không cần gọi nó.
  3. Khai báo một hàm có tên addFunc() nhận vào hai tham số nguyên. Điều này tạo ra nguyên mẫu hàm.
  4. Gọi hàm main(). Logic chương trình phải được thêm vào trong phần thân của hàm này.
  5. Khai báo ba biến số nguyên x, y và sum.
  6. In một số văn bản trên bảng điều khiển. Văn bản yêu cầu người dùng nhập hai số.
  7. Đọc đầu vào của người dùng từ bàn phím. Người dùng nhập hai số cho biến x và y, cách nhau bằng dấu cách.
  8. Gọi hàm addFunc() và truyền cho nó các tham số x và y. Hàm sẽ hoạt động trên các tham số này và gán đầu ra cho tổng biến.
  9. In giá trị của các biến x, y và tổng trên bảng điều khiển cùng với văn bản khác.
  10. Hàm phải trả về giá trị sau khi hoàn thành thành công.
  11. Phần cuối của hàm main().
  12. Định nghĩa chức năng. Chúng ta đang định nghĩa hàm addFunc(). Chúng ta sẽ nêu rõ hàm sẽ làm gì trong phần thân của nó, { }.
  13. Khai báo một biến số nguyên có tên addFunc.
  14. Cộng giá trị của tham số num1 và num2 và gán kết quả cho biến addFunc.
  15. Hàm addFunc() sẽ trả về giá trị của biến addFunc.
  16. Kết thúc phần thân hàm, tức là phần định nghĩa hàm.

Câu Hỏi Thường Gặp

Truyền tham số theo giá trị sao chép đối số, do đó các thay đổi bên trong hàm không ảnh hưởng đến giá trị ban đầu. Truyền tham số theo tham chiếu truyền biến kèm theo dấu và (&), cho phép hàm sửa đổi trực tiếp giá trị của biến gọi. C++ Mặc định là truyền theo giá trị.

Nạp chồng hàm cho phép nhiều hàm có cùng tên nhưng khác nhau về số lượng hoặc kiểu tham số. Trình biên dịch sẽ chọn phiên bản chính xác từ các đối số bạn truyền vào, cải thiện khả năng đọc hiểu cho các thao tác liên quan.

Hàm nội tuyến yêu cầu trình biên dịch chèn phần thân của nó vào mỗi vị trí gọi thay vì thực hiện một lời gọi thông thường. Điều này có thể giảm chi phí cho các hàm nhỏ, mặc dù trình biên dịch có thể bỏ qua gợi ý này.

Hàm đệ quy tự gọi chính nó, chia một vấn đề thành các vấn đề con nhỏ hơn. Nó cần một trường hợp cơ sở để dừng quá trình đệ quy; nếu không, các lời gọi sẽ lặp lại mãi mãi và làm tràn ngăn xếp. Giai thừa là một ví dụ kinh điển.

Bạn truyền tham số dưới dạng con trỏ hoặc mảng có kích thước nhất định và thường truyền độ dài của mảng một cách riêng biệt, vì mảng sẽ tự động chuyển đổi thành con trỏ. Xem phần truyền tham số. mảng trong C++ chức năng Để xem các ví dụ đã được giải chi tiết.

Một hàm trả về trực tiếp một giá trị, nhưng bạn có thể trả về nhiều giá trị bằng cách sử dụng các tham số tham chiếu đầu ra, một struct, một std::pair, một std::tuple hoặc một std::vector. Sau đó, các liên kết có cấu trúc sẽ giải nén tuple được trả về tại vị trí gọi hàm.

Đúng vậy. Trợ lý lập trình AI sẽ chuyển một bình luận bằng ngôn ngữ thông thường thành một đoạn văn hoàn chỉnh. C++ Hàm này đề xuất chữ ký, phần thân và kiểu trả về. Chúng cũng giúp tái cấu trúc các hàm dài, tuy nhiên bạn nên xem lại logic được tạo ra.

Trợ lý GitHub tự động hoàn thành C++ Công cụ này định nghĩa các hàm, nguyên mẫu và lời gọi hàm từ nhận xét hoặc tên của bạn, đề xuất các hàm quá tải và soạn thảo các bài kiểm tra đơn vị. Nó sử dụng các tệp tiêu đề được tham chiếu để làm ngữ cảnh, nhưng mọi đề xuất vẫn cần được xem xét.

Tóm tắt bài viết này với: