Ví dụ về hàm C++

Vi Du Ve Ham C



Lớp C++ hoạt động giống như một hàm được gọi là functor. Cú pháp gọi hàm cũ giống hệt được sử dụng để gọi các functor. Chúng ta tạo một đối tượng nạp chồng “toán tử()” để tạo ra một functor. Chúng ta cũng có thể nói rằng các đối tượng có thể được hiểu là hàm hoặc con trỏ hàm thì được gọi là functor. Khi mô hình hóa các hiệu ứng chức năng bằng cách sử dụng các giá trị của kiểu dữ liệu tham số, “hàm tử” cực kỳ thuận tiện. Trong bài viết này, khái niệm functor sẽ được nghiên cứu chi tiết cùng với mã C++.

Ví dụ 1:

“iostream” là tệp tiêu đề mà chúng tôi đưa vào đây vì chúng tôi phải sử dụng các hàm được khai báo trong tệp tiêu đề này. Tệp tiêu đề “iostream” chứa phần khai báo hàm. Không gian tên “std” cũng được thêm vào đây. Sau đó, chúng ta tạo một lớp có tên là “FunctorClass”. Bên dưới phần này, chúng ta gõ “public” là hàm tạo công khai ở đây và đặt hàm “operator()”. Sau đó, chúng ta đặt một câu mà chúng ta muốn hiển thị trên màn hình trong câu lệnh “cout”.

Sau đó, chúng ta gọi hàm “main()” và tạo đối tượng của “FunctorClass” với tên “my_functor”. Ở đây, chúng ta gọi hàm “my_functor()” để nó hiển thị câu lệnh mà chúng ta đã thêm bên dưới hàm “operator()”.







Mã 1:



#include
sử dụng không gian tên tiêu chuẩn ;
lớp học Lớp hàm {
công cộng :
trống rỗng nhà điều hành ( ) ( ) {
cout << 'Chiến dịch được gọi ở đây' ;
}
} ;
int chủ yếu ( ) {
Lớp hàm my_functor ;
my_functor ( ) ;

trở lại 0 ;
}

Đầu ra:



Dòng mà chúng tôi đã thêm vào trong hàm “operator()” của “FunctorClass” được hiển thị ở đây bằng cách sử dụng đối tượng functor “my_functor”.





Ví dụ 2:

Chúng tôi đưa tệp tiêu đề “iostream” vào đây vì một số nội dung khai báo hàm có trong tệp tiêu đề “iostream”. Không gian tên “std” cũng được chèn vào. Tiếp theo, chúng ta tạo một lớp có tên là “SquareClass”.



Bên dưới đó, chúng ta gõ “public” là hàm tạo công khai và đặt hàm “operator()” của kiểu dữ liệu “int” bên dưới nó. Chúng ta chuyển biến “val” của kiểu dữ liệu “int” cho hàm “operator()” này. Hàm này trả về kết quả nhân khi chúng ta chèn “val * val” vào hàm “return()” bên dưới hàm “operator()”.

Bây giờ, hàm “main()” được gọi ở đây. Sau đó, đối tượng được tạo ở đây với tên “s_functor” của lớp “SquareFunctor”. Sau đó, chúng tôi sử dụng “cout” để hỗ trợ hiển thị thông tin. Sau đó, chúng ta gọi đối tượng “my_functor()” ở đây giống như một hàm và nó trả về kết quả nhân của “5 * 5” khi chúng ta thêm “5” làm tham số trong khi gọi nó.

Mã 2:

#include
sử dụng không gian tên tiêu chuẩn ;
lớp học Lớp vuông {
công cộng :
int nhà điều hành ( ) ( int giá trị ) {
trở lại ( giá trị * giá trị ) ;
}
} ;
int chủ yếu ( ) {
SquareClass s_functor ;
cout << 'Bình phương của giá trị đã cho là' << kết thúc ;
cout << s_hàm ( 5 ) ;

trở lại 0 ;
}

Đầu ra:

Chúng ta nhận được kết quả đầu ra sau khi gọi đối tượng “my_functor” của lớp “SqaureClass” giống như hàm “my_functor()” và sau đó chuyển “5”. Chúng ta nhận được “25” là bình phương của số “5”.

Ví dụ 3:

Tệp tiêu đề “iostream” được đưa vào đây vì nó chứa khai báo hàm và không gian tên “std” được giới thiệu sau đó. Lớp “ProductFunctor” sau đó sẽ được tạo. Hàm tạo công khai, “public”, được gõ bên dưới nó và hàm “operator()” của kiểu dữ liệu “int” được đặt bên dưới nó. Chúng ta ghi đè hàm này ở đây và truyền hai tham số vào đó: “int var1” và “int var2”.

Sau đó, chúng ta sử dụng hàm “return” bên dưới giá trị này và nhân cả hai biến để trả về kết quả nhân của cả hai số “var1 * var2”. Sau đó, hàm “main()” được gọi ở đây và chúng ta tạo đối tượng lớp có tên “P_functor” của lớp “ProductFunctor”. Sau đó, chúng ta khởi tạo một biến mới với tên “pro_result” và gán đối tượng “P_functor” làm hàm “P_functor()” sau khi gọi nó.

Chúng tôi chuyển “28” và “63” làm tham số. Điều này sẽ nhân cả hai giá trị và lưu kết quả vào biến “pro_result” mà chúng tôi in bên dưới bằng cách sử dụng “cout” và chuyển “pro_result” vào đó.

Mã 3:

#include
sử dụng không gian tên tiêu chuẩn ;
lớp học Sản phẩmFunctor {
công cộng :
int nhà điều hành ( ) ( int var1, int var2 ) {
trở lại var1 * var2 ;
}
} ;
int chủ yếu ( ) {
Sản phẩmFunctor P_functor ;
int kết quả sản phẩm = hàm P_ ( 28 , 63 ) ;
cout << 'Sản phẩm là:' << kết quả sản phẩm << kết thúc ;
trở lại 0 ;
}

Đầu ra:

Chúng ta nhận được kết quả sau khi gọi đối tượng “P_functor” là hàm “P_functor()” và truyền các giá trị cho nó. Tích của những giá trị đó là “1764”.

Ví dụ 4:

“GreetingFunctorClass” được tạo trong trường hợp này. Sau đó, chúng ta chèn hàm tạo “public” và ghi đè hàm “operator()” trong hàm tạo “public” này. Chúng tôi gõ “Xin chào! Tôi là Lập trình viên C++ ở đây” sau khi đặt “cout” bên dưới hàm “operator()”.

Bây giờ trở đi, chúng ta gọi “main()”. Chúng ta tạo “g_functor” ở đây làm đối tượng của “GreetingFunctorClass” và sau đó gọi đối tượng “g_functor” này là hàm “g_functor()”. Điều này mang lại kết quả mà chúng tôi đã thêm vào hàm “operator()” trong khi ghi đè nó.

Mã 4:

#include
sử dụng không gian tên tiêu chuẩn ;
sử dụng không gian tên tiêu chuẩn ;
lớp học Lời chàoFunctorLớp {
công cộng :
trống rỗng nhà điều hành ( ) ( ) {
cout << 'Xin chào! Tôi là lập trình viên C++ ở đây' ;
}
} ;
int chủ yếu ( ) {
Lời chàoFunctorClass g_functor ;
g_hàm ( ) ;
trở lại 0 ;
}

Đầu ra:

Ở đây, chúng ta có thể nhận thấy rằng câu lệnh mà chúng ta đã thêm khi ghi đè hàm “operator()” trong mã của mình được hiển thị ở đây khi chúng ta gọi đối tượng lớp giống như một hàm.

Ví dụ 5:

Lần này, “bits/stdc++.h” được đưa vào vì nó chứa tất cả các khai báo hàm cần thiết. Sau đó, không gian tên “std” được đặt ở đây. Lớp mà chúng ta tạo ở đây là lớp “incrementFunctor”. Sau đó, chúng ta tạo một hàm tạo “private” và khởi tạo biến “int_num” với kiểu dữ liệu “int”.

Bên dưới hàm tạo “công khai”, chúng ta đặt “incrementFunctor” và chuyển “int n1” vào bên trong nó. Sau đó, chúng ta gõ “int_num(n1)” sau khi đặt “:”. Sau đó, chúng ta ghi đè hàm là hàm “operator()” của kiểu dữ liệu “int” và khai báo “int arrOfNum” tại đây. Sau đó, chúng tôi sử dụng lệnh “return” và chèn “int_num + arrOfNum”. Bây giờ, thao tác này sẽ tăng giá trị của “arrOfNum”, thêm giá trị “int_num” vào chúng và trả về đây.

Sau khi gọi “main()”, chúng ta khởi tạo “arrOfNum” và gán các giá trị số nguyên khác nhau ở đây. Sau đó, biến “n1” được khởi tạo khi chúng ta thêm hàm “sizeof” như “sizeof(arrOfNum)/sizeof(arrOfNum[0])”. Sau đó, “additionNumber” sẽ được khởi tạo bằng “3”. Bây giờ, chúng ta sử dụng hàm “transform()”. “Transform()” này cũng giống như việc tạo đối tượng của lớp “increamentFunctor” và sau đó gọi đối tượng của nó. Sau đó, chúng ta sử dụng vòng lặp “for” và sau đó “cout” “arrOfNum[i]”.

Mã 5:

#include
sử dụng không gian tên tiêu chuẩn ;
lớp học tăngFunctor
{
riêng tư :
int int_num ;
công cộng :
tăngFunctor ( int n1 ) : int_num ( n1 ) { }
int nhà điều hành ( ) ( int mảng số ) hằng số {
trở lại int_num + mảng số ;
}
} ;
int chủ yếu ( )
{
int mảng số [ ] = { 6 , 3 , 2 , 1 , 9 , 0 , số 8 } ;
int n1 = kích thước của ( mảng số ) / kích thước của ( mảng số [ 0 ] ) ;
int số cộng = 3 ;
biến đổi ( arrOfNum, arrOfNum + n1, arrOfNum, tăngFunctor ( số cộng ) ) ;

( int Tôi = 0 ; Tôi < n1 ; Tôi ++ )
cout << mảng số [ Tôi ] << ' ' ;
}

Đầu ra:

Kết quả của mã được hiển thị ở đây trong đó “incrementFunctor” là “Functor” được sử dụng làm hàm.

Ví dụ 6:

Trong đoạn mã này, chúng ta sử dụng hàm functor “lớn hơn” được xác định trước. Ở đây, chúng tôi bao gồm bốn tệp tiêu đề khác nhau khi chúng tôi yêu cầu chúng trong mã của mình vì các hàm hoặc phương thức mà chúng tôi cần trong mã đều được khai báo trong đó. Sau đó, sau khi thêm “std” và gọi “main()”, chúng ta khởi tạo vectơ “myIntegerVector”. Chúng tôi chèn một số giá trị chưa được sắp xếp vào vectơ này. Bên dưới phần này, chúng tôi áp dụng hàm “sắp xếp” để sắp xếp các giá trị vectơ này.

Khi chúng ta sử dụng hàm này, nó sẽ sắp xếp các giá trị theo thứ tự tăng dần. Nhưng chúng tôi sử dụng “lớn hơn” ở đây là hàm được xác định trước trong C++ để đưa ra kết quả sắp xếp theo cách giảm dần. Sau đó, chúng tôi hiển thị các giá trị được sắp xếp với sự hỗ trợ của vòng lặp “for” và sau đó là “cout”.

Mã 6:

#include
#include
#include
#include
sử dụng không gian tên tiêu chuẩn ;

int chủ yếu ( ) {
vectơ < int > myIntegerVector = { 13 , hai mươi mốt , 19 , 44 , 32 , 42 , 9 , 6 } ;
loại ( myIntegerVector. bắt đầu ( ) , myIntegerVector. kết thúc ( ) , lớn hơn < int > ( ) ) ;
( int vec_num : myIntegerVector ) {
cout << vec_num << '' ;
}
trở lại 0 ;
}

Đầu ra:

Tất cả các giá trị của vectơ được sắp xếp theo cách giảm dần với sự trợ giúp của hàm functor được xác định trước trong C++, hàm functor “lớn hơn” và định nghĩa của nó có sẵn trong tệp tiêu đề “chức năng”.

Phần kết luận

Khái niệm “functor C++” được tìm hiểu sâu trong bài viết này. Chúng tôi đã nghiên cứu rằng một đối tượng có thể được gọi dưới dạng hàm để nạp chồng một hàm có tên là “toán tử()”. Điều này được biết đến như một functor. Quyền truy cập công cộng phải được cung cấp để quá tải “toán tử()” được sử dụng như dự định. Chúng tôi đã minh họa các ví dụ khác nhau trong đó chúng tôi sử dụng “functor” và “functor” được xác định trước trong mã của mình.