Contoh Fungsi C++

Contoh Fungsi C



Kelas C++ yang beroperasi seperti fungsi dipanggil functor. Sintaks panggilan fungsi lama yang sama digunakan untuk memanggil functors. Kami mencipta objek yang melebihkan 'operator()' untuk menjana functor. Kita juga boleh mengatakan bahawa objek yang boleh ditafsirkan sebagai fungsi atau penunjuk fungsi dipanggil functors. Apabila memodelkan kesan fungsi menggunakan nilai jenis data parametrik, 'functors' adalah sangat mudah. Dalam artikel ini, konsep functor akan dikaji secara terperinci bersama-sama dengan kod C++.

Contoh 1:

'iostream' ialah fail pengepala yang kami sertakan di sini kerana kami perlu menggunakan fungsi yang diisytiharkan dalam fail pengepala ini. Fail pengepala 'iostream' mengandungi pengisytiharan fungsi. Ruang nama 'std' juga ditambahkan di sini. Kemudian, kami menjana kelas yang dipanggil 'FunctorClass'. Di bawah ini, kami menaip 'awam' yang merupakan pembina awam di sini dan meletakkan fungsi 'operator()'. Kemudian, kami meletakkan ayat yang kami mahu berikan pada skrin dalam pernyataan 'cout'.

Selepas ini, kami memanggil fungsi 'main()' dan kemudian mencipta objek 'FunctorClass' dengan nama, 'my_functor'. Di sini, kami memanggil fungsi 'my_functor()' supaya ia memaparkan pernyataan yang kami tambahkan di bawah fungsi 'operator()'.







Kod 1:



#include
menggunakan ruang nama std ;
kelas FunctorClass {
awam :
batal pengendali ( ) ( ) {
cout << 'Operasi dipanggil di sini' ;
}
} ;
int utama ( ) {
FunctorClass my_functor ;
my_functor ( ) ;

kembali 0 ;
}

Pengeluaran:



Baris yang kami tambahkan dalam fungsi 'operator()' bagi 'FunctorClass' dipaparkan di sini dengan menggunakan objek functor 'my_functor'.





Contoh 2:

Kami menyertakan fail pengepala 'iostream' di sini kerana beberapa pengisytiharan fungsi terkandung dalam fail pengepala 'iostream'. Ruang nama 'std' juga dimasukkan. Seterusnya, kami mencipta kelas bernama 'SquareClass'.



Di bawah itu, kami menaip 'awam' yang merupakan pembina awam dan meletakkan fungsi 'operator()' jenis data 'int' di bawahnya. Kami menghantar pembolehubah 'val' jenis data 'int' kepada fungsi 'operator()' ini. Fungsi ini mengembalikan hasil pendaraban semasa kami memasukkan 'val * val' dalam fungsi 'return()' di bawah fungsi 'operator()'.

Sekarang, fungsi 'utama()' dipanggil di sini. Kemudian, objek dicipta di sini dengan nama 's_functor' kelas 'SquareFunctor'. Kemudian, kami menggunakan 'cout' yang membantu dalam memberikan maklumat. Selepas ini, kami memanggil objek 'my_functor()' di sini seperti fungsi dan ia mengembalikan hasil pendaraban '5 * 5' semasa kami menambah '5' sebagai parameter semasa memanggilnya.

Kod 2:

#include
menggunakan ruang nama std ;
kelas SquareClass {
awam :
int pengendali ( ) ( int val ) {
kembali ( val * val ) ;
}
} ;
int utama ( ) {
SquareClass s_functor ;
cout << 'Kuasa dua bagi nilai yang diberikan ialah ' << endl ;
cout << s_function ( 5 ) ;

kembali 0 ;
}

Pengeluaran:

Kami mendapat output selepas memanggil objek 'my_functor' kelas 'SqaureClass' seperti fungsi 'my_functor()' dan kemudian menghantar '5'. Kami mendapat '25' sebagai kuasa dua nombor '5'.

Contoh 3:

Fail pengepala 'iostream' disertakan di sini kerana ia mengandungi pengisytiharan fungsi dan ruang nama 'std' diperkenalkan selepas itu. Kelas 'ProductFunctor' kemudiannya dibuat. Pembina awam, 'awam', ditaip di bawahnya dan fungsi 'operator()' jenis data 'int' diletakkan di bawahnya. Kami mengatasi fungsi ini di sini dan lulus dua parameter ke dalamnya: 'int var1' dan 'int var2'.

Kemudian, kami menggunakan 'pulangan' di bawah ini dan mendarab kedua-dua pembolehubah yang mengembalikan hasil pendaraban kedua-dua nombor 'var1 * var2'. Fungsi 'main()' kemudiannya dipanggil di sini dan kami menjana objek kelas dengan nama 'P_functor' kelas 'ProductFunctor'. Kemudian, kami memulakan pembolehubah baharu dengan nama 'pro_result' dan menetapkan objek 'P_functor' sebagai fungsi 'P_functor()' selepas memanggilnya.

Kami lulus '28' dan '63' sebagai parameter. Ini akan mendarabkan kedua-dua nilai dan menyimpan hasilnya dalam pembolehubah 'pro_result' yang kami cetak di bawah ini menggunakan 'cout' dan menghantar 'pro_result' di dalamnya.

Kod 3:

#include
menggunakan ruang nama std ;
kelas ProductFunctor {
awam :
int pengendali ( ) ( int var1, int var2 ) {
kembali var1 * var2 ;
}
} ;
int utama ( ) {
ProductFunctor P_functor ;
int prod_result = P_fungsi ( 28 , 63 ) ;
cout << 'Produknya ialah:' << prod_result << endl ;
kembali 0 ;
}

Pengeluaran:

Kami mendapat produk selepas memanggil objek 'P_functor' sebagai fungsi 'P_functor()' dan menghantar nilai kepadanya. Hasil darab nilai tersebut ialah '1764'.

Contoh 4:

'GreetingFunctorClass' dijana dalam keadaan ini. Kemudian, kami memasukkan pembina 'awam' dan mengatasi fungsi 'pengendali()' dalam pembina 'awam' ini. Kami menaip 'Hello! Saya seorang Pengaturcara C++ di sini' selepas meletakkan 'cout' di bawah fungsi 'operator()'.

Sekarang dan seterusnya, kami memanggil 'utama()'. Kami mencipta 'g_functor' di sini sebagai objek 'GreetingFunctorClass' dan kemudian memanggil objek 'g_functor' ini sebagai fungsi 'g_functor()'. Ini memberikan hasil yang kami tambahkan dalam fungsi 'operator()' sambil mengatasinya.

Kod 4:

#include
menggunakan ruang nama std ;
menggunakan ruang nama std ;
kelas GreetingFunctorClass {
awam :
batal pengendali ( ) ( ) {
cout << 'Helo! Saya seorang Pengaturcara C++ di sini' ;
}
} ;
int utama ( ) {
GreetingFunctorClass g_functor ;
g_function ( ) ;
kembali 0 ;
}

Pengeluaran:

Di sini, kami mungkin dapati bahawa pernyataan yang kami tambahkan apabila kami mengatasi fungsi 'operator()' dalam kod kami dipaparkan di sini semasa kami memanggil objek kelas seperti fungsi.

Contoh 5:

'bits/stdc++.h' disertakan kali ini kerana ia mengandungi semua pengisytiharan fungsi yang diperlukan. Kemudian, ruang nama 'std' diletakkan di sini. Kelas yang kami buat di sini ialah kelas 'incrementFunctor'. Kemudian, kami mencipta pembina 'peribadi' dan memulakan pembolehubah 'int_num' dengan jenis data 'int'.

Di bawah ini, pembina 'awam', kami meletakkan 'incrementFunctor' dan lulus 'int n1' di dalamnya. Kemudian, kami menaip 'int_num(n1)' selepas meletakkan ':'. Kemudian, kami mengatasi fungsi yang merupakan fungsi 'operator()' bagi jenis data 'int' dan mengisytiharkan 'int arrOfNum' di sini. Kami kemudian menggunakan 'return' dan masukkan 'int_num + arrOfNum'. Sekarang, ini menambah nilai 'arrOfNum', menambah nilai 'int_num' ke dalamnya dan mengembalikannya ke sini.

Selepas menggunakan 'main()', kami memulakan 'arrOfNum' dan menetapkan nilai integer yang berbeza di sini. Kemudian, pembolehubah 'n1' dimulakan di mana kami menambah fungsi 'sizeof' seperti 'sizeof(arrOfNum)/sizeof(arrOfNum[0])'. Selepas ini, 'nombor tambahan' kemudiannya dimulakan dengan '3'. Sekarang, kami menggunakan fungsi 'transform()'. 'transform()' ini adalah sama seperti mencipta objek kelas 'increamentFunctor' dan kemudian memanggil objeknya. Selepas ini, kami menggunakan gelung 'untuk' dan kemudian 'cout' 'arrOfNum[i]'.

Kod 5:

#include
menggunakan ruang nama std ;
kelas incrementFunctor
{
persendirian :
int int_num ;
awam :
incrementFunctor ( int n1 ) : int_num ( n1 ) { }
int pengendali ( ) ( int arrOfNum ) const {
kembali int_num + arrOfNum ;
}
} ;
int utama ( )
{
int arrOfNum [ ] = { 6 , 3 , 2 , 1 , 9 , 0 , 8 } ;
int n1 = saiz ( arrOfNum ) / saiz ( arrOfNum [ 0 ] ) ;
int nombor tambahan = 3 ;
mengubah ( arrOfNum, arrOfNum + n1, arrOfNum, incrementFunctor ( nombor tambahan ) ) ;

untuk ( int i = 0 ; i < n1 ; i ++ )
cout << arrOfNum [ i ] << ' ' ;
}

Pengeluaran:

Hasil kod ditunjukkan di sini di mana 'incrementFunctor' ialah 'Functor' yang digunakan sebagai fungsi.

Contoh 6:

Dalam kod ini, kami menggunakan fungsi 'lebih hebat' yang dipratentukan. Di sini, kami memasukkan empat fail pengepala berbeza kerana kami memerlukannya dalam kod kami kerana fungsi atau kaedah yang kami perlukan dalam kod kami diisytiharkan di dalamnya. Kemudian, selepas menambah 'std' dan kemudian memanggil 'main()', kami memulakan vektor 'myIntegerVector'. Kami memasukkan beberapa nilai yang tidak diisih dalam vektor ini. Di bawah ini, kami menggunakan fungsi 'isih' untuk mengisih nilai vektor ini.

Apabila kita menggunakan fungsi ini, ia mengisih nilai dalam tertib menaik. Tetapi kami menggunakan 'lebih hebat' di sini iaitu fungsi yang telah ditetapkan dalam C++ yang memberikan hasil pengisihan secara menurun. Selepas ini, kami memaparkan nilai yang diisih dengan bantuan gelung 'untuk' dan kemudian 'cout'.

Kod 6:

#include
#include
#include
#include
menggunakan ruang nama std ;

int utama ( ) {
vektor < int > myIntegerVector = { 13 , dua puluh satu , 19 , 44 , 32 , 42 , 9 , 6 } ;
menyusun ( myIntegerVector. bermula ( ) , myIntegerVector. tamat ( ) , lebih besar < int > ( ) ) ;
untuk ( int vec_num : myIntegerVector ) {
cout << vec_num << '' ;
}
kembali 0 ;
}

Pengeluaran:

Semua nilai vektor diisih dalam cara menurun dengan bantuan functor yang dipratentukan dalam C++ yang merupakan functor 'lebih hebat', dan takrifannya tersedia dalam fail pengepala 'berfungsi'.

Kesimpulan

Konsep 'functor C++' diterokai dengan mendalam dalam artikel ini. Kami telah mengkaji bahawa objek boleh digunakan sebagai fungsi untuk melebihkan fungsi yang dipanggil “operator()”. Ini dikenali sebagai functor. Akses awam mesti disediakan untuk kelebihan beban 'operator()' untuk digunakan seperti yang dimaksudkan. Kami menggambarkan contoh yang berbeza di mana kami menggunakan 'functors' dan 'functor' yang telah ditetapkan dalam kod kami.