Varsayılan (default) Argüman Flashcards
Fonksiyonlarda default argümanlar
func(int a , int b , int c) diye tanımlıyoruz
ancak func(5,6) olarakta 3. parametreyi girmeden bu fonksiyonu çağırabiliyoruz.
func(int a , int b , int c = 50);
derleyici bu halde bunu 3 lü olarakta kullanabilir ancak 2 li olarak çağırıldığında varsayılan bir 50 değeri vardır.
ve bu deafult atama işlemi function declaration kısmında yapılır.
Fonksiyonu tanımlama
/////// declaration
void func(int =10 , int = 20 , int = 30 );
//////// definition
void func(int a , int b , int c ) {
cout «_space;a «_space;endl;
cout «_space;b «_space;endl;
cout «_space;c «_space;endl;
}
int main()
func( 3 , 4, 5 ) ; // bu çalıştığında ekranda 3 4 5 değerleri çıkar ANCAK;
func (5 , 4 ) ; // bu şekilde eksik parametreli çağrıldı ancak declaration kısmında default verdik. Oyüzden çıktı 5 4 30 olacak.
Örnek
/////////////////////////////////////////////////////////////////////
void f1 (int a = 10)
void f2( int x = f1() ) // öncelik kurallarına göre böyle yapılabilir
int x;
void f1(int &r = x) // aynı şekilde öncelik kurallarına göre bu da yapılabilir.
//////////////////////////////////////////////////////////////
int func() {
cout «_space;” calling func” «_space;endl;
return 1
}
int x = func()
int main()
cout«_space;“selam” «_space;endl;
// Bu kod örneğinde kod mainden başlar ancak önce calling func yazısı yazdırılır. Çünkü globalde x değişkenine func() atanırken aynı zamanda da yazı yazdırılıyor. O yüzden üstte olduğu için ilk bu ifade yazdırılıyor.
// O yüzden bunlara dikkat etmek gerek ki karışıklık olmasın.
Örnek 2
void processDate( int day, int month, int year = -1 )
int main(){
processDate ( 1 , 4 )
// dediğimzde year otomatik olarak -1 algılandı ve fonksiyonun içinde 2023 olarak atandı.
}
void processDate( int day, int month, int year ){
if ( year == -1 )
{
time_t timer = time(0);
tm *tptr = localtime(&timer);
year = tptr -> tm_year + 1900
}
NOT : varsayılan argüman illa inital değer atamak için kullanılmaz. if bloğun içinde kullanılmak için de kullanılabilir.