ตัวอย่างฟังก์ชัน C++

Tawxyang Fangkchan C



คลาส C++ ที่ทำงานเหมือนกับฟังก์ชันเรียกว่า functor ไวยากรณ์การเรียกฟังก์ชันเก่าที่เหมือนกันใช้เพื่อเรียกใช้ฟังก์ชัน เราสร้างวัตถุที่โอเวอร์โหลด 'ตัวดำเนินการ ()' เพื่อสร้างฟังก์ชัน นอกจากนี้เรายังสามารถพูดได้ว่าวัตถุที่อาจตีความได้ว่าเป็นฟังก์ชันหรือตัวชี้ฟังก์ชันเรียกว่าฟังก์ชัน เมื่อสร้างแบบจำลองเอฟเฟกต์การทำงานโดยใช้ค่าของประเภทข้อมูลพาราเมตริก “ฟังก์ชัน” จะสะดวกอย่างยิ่ง ในบทความนี้ แนวคิดของ functor จะได้รับการศึกษาโดยละเอียดพร้อมกับโค้ด C++

ตัวอย่างที่ 1:

“iostream” เป็นไฟล์ส่วนหัวที่เรารวมไว้ที่นี่เนื่องจากเราต้องใช้ฟังก์ชันที่ประกาศไว้ในไฟล์ส่วนหัวนี้ ไฟล์ส่วนหัว “iostream” มีการประกาศฟังก์ชัน เนมสเปซ 'std' ก็ถูกเพิ่มที่นี่ด้วย จากนั้นเราสร้างคลาสที่เรียกว่า “FunctorClass” ด้านล่างนี้ เราพิมพ์ 'public' ซึ่งเป็นตัวสร้างสาธารณะที่นี่ และวางฟังก์ชัน 'operator()' จากนั้นเราวางประโยคที่เราต้องการแสดงบนหน้าจอในคำสั่ง 'cout'

หลังจากนี้ เราจะเรียกฟังก์ชัน “main()” จากนั้นสร้างอ็อบเจ็กต์ของ “FunctorClass” ด้วยชื่อ “my_functor” ในที่นี้ เราเรียกฟังก์ชัน 'my_functor()' เพื่อแสดงคำสั่งที่เราเพิ่มไว้ใต้ฟังก์ชัน 'operator()'







รหัส 1:



#รวม
โดยใช้ เนมสเปซ มาตรฐาน ;
ระดับ FunctorClass {
สาธารณะ : :
เป็นโมฆะ ตัวดำเนินการ ( ) ( ) {
ศาล << “ปฏิบัติการถูกเรียกที่นี่” ;
}
} ;
ภายใน หลัก ( ) {
FunctorClass my_functor ;
my_functor ( ) ;

กลับ 0 ;
}

เอาท์พุท:



บรรทัดที่เราเพิ่มในฟังก์ชัน “operator()” ของ “FunctorClass” จะแสดงที่นี่โดยใช้วัตถุ functor “my_functor”





ตัวอย่างที่ 2:

เรารวมไฟล์ส่วนหัว 'iostream' ไว้ที่นี่เนื่องจากมีการประกาศฟังก์ชันบางอย่างอยู่ในไฟล์ส่วนหัว 'iostream' เนมสเปซ 'std' ก็ถูกแทรกเข้าไปด้วย ต่อไปเราสร้างคลาสชื่อ “SquareClass”



ด้านล่างนั้น เราพิมพ์ 'public' ซึ่งเป็นตัวสร้างสาธารณะและวางตำแหน่งฟังก์ชัน 'operator()' ของประเภทข้อมูล 'int' ไว้ข้างใต้ เราส่งตัวแปร 'val' ของประเภทข้อมูล 'int' ไปยังฟังก์ชัน 'operator()' นี้ ฟังก์ชันนี้ส่งคืนผลลัพธ์การคูณเมื่อเราแทรก “val * val” ในฟังก์ชัน “return()” ด้านล่างฟังก์ชัน “operator()”

ตอนนี้ฟังก์ชัน 'main()' ถูกเรียกที่นี่ จากนั้น ออบเจ็กต์จะถูกสร้างขึ้นที่นี่ด้วยชื่อ “s_functor” ของคลาส “SquareFunctor” จากนั้นเราใช้ 'cout' ซึ่งช่วยในการแสดงผลข้อมูล หลังจากนี้ เราจะเรียกอ็อบเจ็กต์ “my_functor()” ที่นี่เหมือนกับฟังก์ชัน และมันจะส่งคืนผลการคูณของ “5 * 5” ตามที่เราเพิ่ม “5” เป็นพารามิเตอร์ในขณะที่เรียกใช้

รหัส 2:

#รวม
โดยใช้ เนมสเปซ มาตรฐาน ;
ระดับ สแควร์คลาส {
สาธารณะ : :
ภายใน ตัวดำเนินการ ( ) ( ภายใน วาล ) {
กลับ ( วาล * วาล ) ;
}
} ;
ภายใน หลัก ( ) {
SquareClass s_functor ;
ศาล << “กำลังสองของค่าที่กำหนดคือ” << สิ้นสุด ;
ศาล << s_ฟังก์ชั่น ( 5 ) ;

กลับ 0 ;
}

เอาท์พุท:

เราได้ผลลัพธ์หลังจากเรียกอ็อบเจ็กต์ “my_functor” ของคลาส “SqaureClass” เช่น ฟังก์ชัน “my_functor()” แล้วส่งผ่าน “5” เราได้ '25' เป็นกำลังสองของหมายเลข '5'

ตัวอย่างที่ 3:

ไฟล์ส่วนหัว “iostream” รวมอยู่ที่นี่เนื่องจากมีการประกาศฟังก์ชัน และแนะนำเนมสเปซ “std” ในภายหลัง จากนั้นจึงสร้างคลาส 'ProductFunctor' ตัวสร้างสาธารณะ 'สาธารณะ' ถูกพิมพ์ด้านล่างและฟังก์ชัน 'ตัวดำเนินการ ()' ของประเภทข้อมูล 'int' จะอยู่ด้านล่าง เราแทนที่ฟังก์ชันนี้ที่นี่และส่งพารามิเตอร์สองตัวเข้าไป: “int var1” และ “int var2”

จากนั้น เราใช้ 'ผลตอบแทน' ด้านล่างนี้และคูณตัวแปรทั้งสองซึ่งส่งคืนผลการคูณของตัวเลขทั้งสอง 'var1 * var2' จากนั้นฟังก์ชัน “main()” จะถูกเรียกที่นี่ และเราสร้างคลาสอ็อบเจ็กต์ด้วยชื่อ “P_functor” ของคลาส “ProductFunctor” จากนั้นเราเริ่มต้นตัวแปรใหม่ด้วยชื่อ “pro_result” และกำหนดวัตถุ “P_functor” เป็นฟังก์ชัน “P_functor()” หลังจากที่เรียกมัน

เราส่งผ่าน '28' และ '63' เป็นพารามิเตอร์ วิธีนี้จะคูณทั้งสองค่าและบันทึกผลลัพธ์ไว้ในตัวแปร 'pro_result' ที่เราพิมพ์ด้านล่างโดยใช้ 'cout' และส่งผ่าน 'pro_result' ในนั้น

รหัส 3:

#รวม
โดยใช้ เนมสเปซ มาตรฐาน ;
ระดับ ProductFunctor {
สาธารณะ : :
ภายใน ตัวดำเนินการ ( ) ( ภายใน วาร์1, ภายใน var2 ) {
กลับ var1 * var2 ;
}
} ;
ภายใน หลัก ( ) {
ProductFunctor P_functor ;
ภายใน ผลิตภัณฑ์_ผลลัพธ์ = P_ฟังก์ชั่น ( 28 , 63 ) ;
ศาล << 'สินค้าคือ:' << ผลิตภัณฑ์_ผลลัพธ์ << สิ้นสุด ;
กลับ 0 ;
}

เอาท์พุท:

เราได้รับผลิตภัณฑ์หลังจากเรียกวัตถุ “P_functor” เป็นฟังก์ชัน “P_functor()” และส่งค่าไปให้ ผลคูณของค่าเหล่านั้นคือ “1764”

ตัวอย่างที่ 4:

“GreetingFunctorClass” ถูกสร้างขึ้นในกรณีนี้ จากนั้นเราแทรกคอนสตรัคเตอร์ 'สาธารณะ' และแทนที่ฟังก์ชัน 'โอเปอเรเตอร์ ()' ในตัวสร้าง 'สาธารณะ' นี้ เราพิมพ์ 'สวัสดี! ฉันเป็นโปรแกรมเมอร์ C++ ที่นี่” หลังจากวาง “cout” ไว้ข้างใต้ฟังก์ชัน “operator()”

ต่อไปนี้เราเรียกว่า 'main()' เราสร้าง “g_functor” ที่นี่เป็นวัตถุของ “GreetingFunctorClass” จากนั้นเรียกวัตถุ “g_functor” นี้ว่าเป็นฟังก์ชัน “g_functor()” สิ่งนี้จะให้ผลลัพธ์ที่เราเพิ่มในฟังก์ชัน 'ตัวดำเนินการ ()' ในขณะที่แทนที่มัน

รหัส 4:

#รวม
โดยใช้ เนมสเปซ มาตรฐาน ;
โดยใช้ เนมสเปซ มาตรฐาน ;
ระดับ คำทักทาย FunctorClass {
สาธารณะ : :
เป็นโมฆะ ตัวดำเนินการ ( ) ( ) {
ศาล << 'สวัสดี! ฉันเป็นโปรแกรมเมอร์ C++ ที่นี่' ;
}
} ;
ภายใน หลัก ( ) {
GreetingFunctorClass g_functor ;
g_function ( ) ;
กลับ 0 ;
}

เอาท์พุท:

ที่นี่ เราอาจสังเกตเห็นว่าคำสั่งที่เราเพิ่มเมื่อเราแทนที่ฟังก์ชัน “operator()” ในโค้ดของเราจะแสดงที่นี่เมื่อเราเรียกคลาสอ็อบเจ็กต์เหมือนกับฟังก์ชัน

ตัวอย่างที่ 5:

ในครั้งนี้จะรวม “bits/stdc++.h” เนื่องจากมีการประกาศฟังก์ชันที่จำเป็นทั้งหมด จากนั้น เนมสเปซ 'std' จะถูกวางไว้ที่นี่ คลาสที่เราสร้างที่นี่คือคลาส “increationFunctor” จากนั้น เราสร้างคอนสตรัคเตอร์ 'ส่วนตัว' และเริ่มต้นตัวแปร 'int_num' ด้วยประเภทข้อมูล 'int'

ข้างใต้นี้ ตัวสร้าง 'สาธารณะ' เราวาง 'increationFunctor' และส่ง 'int n1' เข้าไปข้างใน จากนั้นเราพิมพ์ “int_num(n1)” หลังจากวาง “:” จากนั้น เราจะแทนที่ฟังก์ชันซึ่งเป็นฟังก์ชัน “operator()” ของประเภทข้อมูล “int” และประกาศ “int arrOfNum” ที่นี่ จากนั้นเราใช้ 'return' และใส่ 'int_num + arrOfNum' ตอนนี้ การดำเนินการนี้จะเพิ่มค่าของ 'arrOfNum' เพิ่มค่า 'int_num' ลงไป และส่งกลับค่าเหล่านี้ที่นี่

หลังจากเรียกใช้ 'main()' เราจะเริ่มต้น 'arrOfNum' และกำหนดค่าจำนวนเต็มที่แตกต่างกันที่นี่ จากนั้น ตัวแปร “n1” จะถูกเตรียมใช้งานโดยที่เราเพิ่มฟังก์ชัน “sizeof” เช่น “sizeof(arrOfNum)/sizeof(arrOfNum[0])” หลังจากนี้ 'หมายเลขเพิ่มเติม' จะเริ่มต้นด้วย '3' ตอนนี้เราใช้ฟังก์ชัน 'transform()' “transform()” นี้เหมือนกับการสร้างอ็อบเจ็กต์ของคลาส “increamentFunctor” จากนั้นจึงเรียกอ็อบเจ็กต์ของมัน หลังจากนี้ เราใช้ลูป 'for' จากนั้น 'cout' the 'arrOfNum[i]'

รหัส 5:

#รวม
โดยใช้ เนมสเปซ มาตรฐาน ;
ระดับ increationFunctor
{
ส่วนตัว : :
ภายใน int_num ;
สาธารณะ : :
increationFunctor ( ภายใน n1 ) : : int_num ( n1 ) { }
ภายใน ตัวดำเนินการ ( ) ( ภายใน arrOfNum ) ค่าคงที่ {
กลับ int_num + arrOfNum ;
}
} ;
ภายใน หลัก ( )
{
ภายใน arrOfNum [ ] = { 6 , 3 , 2 , 1 , 9 , 0 , 8 } ;
ภายใน n1 = ขนาดของ ( arrOfNum ) / ขนาดของ ( arrOfNum [ 0 ] ) ;
ภายใน หมายเลขเพิ่มเติม = 3 ;
แปลง ( arrOfNum, arrOfNum + n1, arrOfNum, ฟังก์ชันเพิ่ม ( หมายเลขเพิ่มเติม ) ) ;

สำหรับ ( ภายใน ฉัน = 0 ; ฉัน < n1 ; ฉัน ++ )
ศาล << arrOfNum [ ฉัน ] << ' ' ;
}

เอาท์พุท:

ผลลัพธ์ของโค้ดจะแสดงอยู่ที่นี่ โดย 'increationFunctor' คือ 'Functor' ที่ใช้เป็นฟังก์ชัน

ตัวอย่างที่ 6:

ในโค้ดนี้ เราใช้ฟังก์ชัน 'greater' ที่กำหนดไว้ล่วงหน้า ที่นี่ เรารวมไฟล์ส่วนหัวที่แตกต่างกันสี่ไฟล์ตามที่เราต้องการในโค้ดของเรา เนื่องจากมีการประกาศฟังก์ชันหรือวิธีการที่เราต้องการในโค้ดของเรา จากนั้น หลังจากเพิ่ม “std” แล้วเรียก “main()” เราจะเริ่มต้นเวกเตอร์ “myIntegerVector” เราแทรกค่าที่ไม่เรียงลำดับลงในเวกเตอร์นี้ ด้านล่างนี้ เราใช้ฟังก์ชัน 'sort' เพื่อจัดเรียงค่าเวกเตอร์เหล่านี้

เมื่อเราใช้ฟังก์ชันนี้ มันจะเรียงลำดับค่าจากน้อยไปหามาก แต่เราใช้ 'มากกว่า' ที่นี่ซึ่งเป็นฟังก์ชันที่กำหนดไว้ล่วงหน้าใน C++ ซึ่งให้ผลลัพธ์ของการเรียงลำดับจากมากไปน้อย หลังจากนี้ เราจะแสดงค่าที่เรียงลำดับโดยใช้ลูป 'for' ตามด้วย 'cout'

รหัส 6:

#รวม
#รวม <อัลกอริทึม>
#รวม <เวกเตอร์>
#include <ฟังก์ชันการทำงาน>
โดยใช้ เนมสเปซ มาตรฐาน ;

ภายใน หลัก ( ) {
เวกเตอร์ < ภายใน > myIntegerVector = { 13 , ยี่สิบเอ็ด , 19 , 44 , 32 , 42 , 9 , 6 } ;
เรียงลำดับ ( myIntegerVector. เริ่ม ( ) , myIntegerVector. จบ ( ) มากขึ้น < ภายใน > ( ) ) ;
สำหรับ ( ภายใน vec_num : : myIntegerVector ) {
ศาล << vec_num << '' ;
}
กลับ 0 ;
}

เอาท์พุท:

ค่าทั้งหมดของเวกเตอร์จะถูกจัดเรียงในลักษณะจากมากไปน้อยด้วยความช่วยเหลือของ functor ที่กำหนดไว้ล่วงหน้าใน C++ ซึ่งเป็นฟังก์ชัน 'greater' และคำจำกัดความมีอยู่ในไฟล์ส่วนหัว 'ฟังก์ชันการทำงาน'

บทสรุป

แนวคิดของ “functor C++” ได้รับการสำรวจอย่างลึกซึ้งในบทความนี้ เราศึกษาว่าสามารถเรียกใช้ออบเจ็กต์เป็นฟังก์ชันเพื่อโอเวอร์โหลดฟังก์ชันที่เรียกว่า “โอเปอเรเตอร์()” ได้ สิ่งนี้เรียกว่าเป็นฟังก์ชัน ต้องจัดให้มีการเข้าถึงสาธารณะเพื่อให้ 'ตัวดำเนินการ ()' ใช้งานมากเกินไปตามที่ตั้งใจไว้ เราแสดงตัวอย่างต่างๆ ที่เราใช้ “ฟังก์ชั่น” และ “ฟังก์ชั่น” ที่กำหนดไว้ล่วงหน้าในโค้ดของเรา