İşlev C++ Örnekleri

Islev C Ornekleri



Bir fonksiyon gibi çalışan C++ sınıfına funktor adı verilir. İşlevleri çağırmak için aynı eski işlev çağrısı sözdizimi kullanılır. Bir functor oluşturmak için “operator()”a aşırı yük getiren bir nesne yaratıyoruz. Ayrıca bir fonksiyon ya da fonksiyon işaretçisi olarak yorumlanabilecek nesnelere de funktor denildiğini söyleyebiliriz. Parametrik veri türlerinin değerlerini kullanarak fonksiyonel etkileri modellerken “işlevseller” son derece kullanışlıdır. Bu yazıda functor kavramı C++ kodları ile birlikte detaylı olarak incelenecektir.

Örnek 1:

“iostream” buraya eklediğimiz başlık dosyasıdır çünkü bu başlık dosyasında bildirilen işlevleri kullanmamız gerekir. “iostream” başlık dosyası bir işlev bildirimi içerir. “Std” ad alanı da buraya eklenir. Daha sonra “FunctorClass” adında bir sınıf oluşturuyoruz. Bunun altına buraya public yapıcısı olan “public” yazıp “operator()” fonksiyonunu yerleştiriyoruz. Daha sonra “cout” ifadesinin içerisine ekrana vermek istediğimiz cümleyi yerleştiriyoruz.

Bundan sonra “main()” fonksiyonunu çağırıp “FunctorClass”ın “my_functor” isimli nesnesini oluşturuyoruz. Burada “my_functor()” fonksiyonunu çağırıyoruz, böylece “operator()” fonksiyonunun altına eklediğimiz ifadeyi gösteriyor.







Kod 1:



#include
kullanarak ad alanı std ;
sınıf İşlevsel Sınıf {
halk :
geçersiz Şebeke ( ) ( ) {
cout << 'Operasyon buraya çağrıldı' ;
}
} ;
int ana ( ) {
FunctorClass my_functor ;
my_functor ( ) ;

geri dönmek 0 ;
}

Çıktı:



“FunctorClass”ın “operator()” fonksiyonuna eklediğimiz satır burada “my_functor” functor nesnesi kullanılarak görüntülenmektedir.





Örnek 2:

'iostream' başlık dosyasında bazı işlev bildirimleri bulunduğundan 'iostream' başlık dosyasını buraya ekledik. “Std” ad alanı da eklenir. Daha sonra “SquareClass” adında bir sınıf oluşturuyoruz.



Bunun altına public yapıcısı olan “public” yazıp altına “int” veri tipinin “operator()” fonksiyonunu konumlandırıyoruz. Bu “operator()” fonksiyonuna “int” veri tipinin “val” değişkenini aktarıyoruz. Bu fonksiyon, “operator()” fonksiyonunun altındaki “return()” fonksiyonuna “val *val” eklediğimizde çarpma sonucunu döndürür.

Şimdi burada “main()” fonksiyonu çağrılıyor. Daha sonra burada “SquareFunctor” sınıfının “s_functor” ismiyle nesne oluşturulur. Daha sonra bilginin işlenmesine yardımcı olan “cout”u kullanırız. Bundan sonra burada “my_functor()” nesnesini bir fonksiyon gibi çağırıyoruz ve çağırırken parametre olarak “5”i eklediğimiz için “5 * 5” çarpım sonucunu döndürüyor.

Kod 2:

#include
kullanarak ad alanı std ;
sınıf Kare Sınıf {
halk :
int Şebeke ( ) ( int val ) {
geri dönmek ( val * val ) ;
}
} ;
int ana ( ) {
SquareClass s_functor ;
cout << 'Verilen değerin karesi' << sonunda ;
cout << s_fonksiyonu ( 5 ) ;

geri dönmek 0 ;
}

Çıktı:

“SqaureClass” sınıfının “my_functor” nesnesini “my_functor()” fonksiyonu gibi çağırıp “5”i geçtikten sonra çıktıyı alıyoruz. “5” sayısının karesi olarak “25” elde ederiz.

Örnek 3:

“iostream” başlık dosyası bir işlev bildirimi içerdiğinden buraya dahil edilmiştir ve “std” ad alanı daha sonra tanıtılmıştır. Daha sonra “ProductFunctor” sınıfı oluşturulur. Altına public yapıcısı “public” yazılır ve altına “int” veri tipinin “operator()” fonksiyonu yerleştirilir. Burada bu fonksiyonu geçersiz kılıyoruz ve içine iki parametre aktarıyoruz: “int var1” ve “int var2”.

Daha sonra bunun altındaki “return” ifadesini kullanarak her iki sayının çarpımını veren “var1 * var2” değerini veren her iki değişkeni de çarpıyoruz. Daha sonra burada “main()” fonksiyonu çağrılıyor ve “ProductFunctor” sınıfının “P_functor” isimli sınıf nesnesini oluşturuyoruz. Daha sonra “pro_result” isminde yeni bir değişken başlatıyoruz ve “P_functor” nesnesini çağırdıktan sonra “P_functor()” fonksiyonu olarak atadık.

Parametre olarak “28” ve “63”ü geçiyoruz. Bu, her iki değeri de çarpacak ve sonucu, 'cout'u kullanarak ve içine 'pro_result'u geçirerek bunun altına yazdıracağımız 'pro_result' değişkenine kaydedecektir.

Kod 3:

#include
kullanarak ad alanı std ;
sınıf ÜrünFonktörü {
halk :
int Şebeke ( ) ( int var1, int var2 ) {
geri dönmek var1 * var2 ;
}
} ;
int ana ( ) {
ProductFunctor P_functor ;
int prod_result = P_fonksiyonu ( 28 , 63 ) ;
cout << 'Ürün:' << prod_result << sonunda ;
geri dönmek 0 ;
}

Çıktı:

“P_functor” nesnesini “P_functor()” fonksiyonu olarak çağırıp değerleri ona aktardıktan sonra ürünü alıyoruz. Bu değerlerin çarpımı “1764” olur.

Örnek 4:

Bu örnekte “GreetingFunctorClass” oluşturulur. Daha sonra “public” yapıcısını ekliyoruz ve bu “public” yapıcıya “operator()” fonksiyonunu geçersiz kılıyoruz. “Merhaba! “operator()” fonksiyonunun altına “cout”u yerleştirdikten sonra burada C++ Programcısıyım”.

Artık bundan sonra “main()” adını vereceğiz. Burada “g_functor”ı “GreetingFunctorClass”ın nesnesi olarak oluşturuyoruz ve daha sonra bu “g_functor” nesnesine “g_functor()” fonksiyonu adını veriyoruz. Bu, “operator()” fonksiyonuna geçersiz kılarak eklediğimiz sonucu verir.

Kod 4:

#include
kullanarak ad alanı std ;
kullanarak ad alanı std ;
sınıf TebrikFunctorClass {
halk :
geçersiz Şebeke ( ) ( ) {
cout << 'Merhaba! Burada C++ Programcısıyım' ;
}
} ;
int ana ( ) {
TebrikFunctorClass g_functor ;
g_function ( ) ;
geri dönmek 0 ;
}

Çıktı:

Burada sınıf nesnesini bir fonksiyon gibi çağırdığımızda kodumuzda “operator()” fonksiyonunu overrode ettiğimizde eklediğimiz ifadenin burada görüntülendiğini fark edebiliriz.

Örnek 5:

“bits/stdc++.h” bu kez gerekli tüm işlev bildirimlerini içerdiğinden dahil edilmiştir. Daha sonra buraya “std” isim alanı yerleştirilir. Burada oluşturduğumuz sınıf “incrementFunctor” sınıfıdır. Daha sonra “private” bir kurucu oluşturup “int_num” değişkenini “int” veri tipiyle başlatıyoruz.

Bunun altına, “public” yapıcının altına, “incrementFunctor”ı yerleştirip içine “int n1”i aktarıyoruz. Daha sonra “:” işaretini yerleştirdikten sonra “int_num(n1)” yazıyoruz. Daha sonra “int” veri tipinin “operator()” fonksiyonu olan fonksiyonu override edip, burada “int arrOfNum” bildiriyoruz. Daha sonra “return”u kullanıp “int_num + arrOfNum”u ekliyoruz. Artık bu, “arrOfNum”un değerlerini artırır, bunlara “int_num” değerini ekler ve buraya döndürür.

“main()” komutunu çağırdıktan sonra “arrOfNum”u başlatıyoruz ve buraya farklı tamsayı değerleri atadık. Daha sonra “sizeof(arrOfNum)/sizeof(arrOfNum[0])” gibi “sizeof” fonksiyonunu eklediğimiz yerde “n1” değişkeni başlatılıyor. Bundan sonra “additionNumber” “3” ile başlatılır. Şimdi “transform()” fonksiyonunu kullanıyoruz. Bu 'transform()', 'increamentFunctor' sınıfının nesnesini oluşturup ardından nesnesini çağırmakla aynıdır. Bundan sonra “for” döngüsünü kullanıyoruz ve ardından “arrOfNum[i]”yi “cout” ediyoruz.

Kod 5:

#include
kullanarak ad alanı std ;
sınıf artışFonktörü
{
özel :
int int_num ;
halk :
artışFonktörü ( int n1 ) : int_num ( n1 ) { }
int Şebeke ( ) ( int arrOfNum ) yapı {
geri dönmek int_num + arrOfNum ;
}
} ;
int ana ( )
{
int arrOfNum [ ] = { 6 , 3 , 2 , 1 , 9 , 0 , 8 } ;
int n1 = boyutu ( arrOfNum ) / boyutu ( arrOfNum [ 0 ] ) ;
int ekleme numarası = 3 ;
dönüştürmek ( arrOfNum, arrOfNum + n1, arrOfNum, artışFonktörü ( ekleme numarası ) ) ;

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

Çıktı:

Kodun sonucu burada gösterilmektedir; burada “incrementFunctor”, fonksiyon olarak kullanılan “Functor” dur.

Örnek 6:

Bu kodda önceden tanımlanmış “büyük” işlevini kullanıyoruz. Burada, kodumuzda ihtiyaç duyduğumuz işlevler veya yöntemler bunların içinde bildirildiğinden, kodumuza ihtiyaç duyduğumuz dört farklı başlık dosyasını dahil ediyoruz. Daha sonra “std”yi ekleyip “main()” çağırdıktan sonra “myIntegerVector” vektörünü başlatıyoruz. Bu vektöre bazı sıralanmamış değerler ekliyoruz. Bunun altında bu vektör değerlerini sıralamak için “sort” fonksiyonunu uyguluyoruz.

Bu fonksiyonu kullandığımızda değerleri artan şekilde sıralar. Ancak biz burada C++'da önceden tanımlanmış olan ve azalan sıralama sonucunu veren 'büyük' fonksiyonunu kullanıyoruz. Daha sonra “for” döngüsü ve sonrasında “cout” yardımıyla sıralanan değerleri ekrana getiriyoruz.

Kod 6:

#include
#include
#include
#include
kullanarak ad alanı std ;

int ana ( ) {
vektör < int > benimTamsayıVektörüm = { 13 , yirmi bir , 19 , 44 , 32 , 42 , 9 , 6 } ;
düzenlemek ( myIntegerVector. başlamak ( ) , myIntegerVector. son ( ) , daha büyük < int > ( ) ) ;
için ( int vec_num : benimTamsayıVektörüm ) {
cout << vec_num << '' ;
}
geri dönmek 0 ;
}

Çıktı:

Vektörün tüm değerleri, C++'da önceden tanımlanmış olan “büyük” fonksiyon yardımıyla azalan şekilde sıralanır ve tanımı “işlevsel” başlık dosyasında mevcuttur.

Çözüm

Bu makalede 'İşlev C++' kavramı derinlemesine incelenmiştir. Bir nesnenin 'operatör()' adı verilen bir işlevi aşırı yüklemek için bir işlev olarak çağrılabileceğini inceledik. Bu bir işlev olarak bilinir. “Operator()”ın aşırı yüklenmesinin amaçlandığı şekilde kullanılabilmesi için genel erişim sağlanmalıdır. Kodumuzda “functors” ve önceden tanımlı “functor”ı kullandığımız farklı örnekleri resimledik.