top of page

C++ Dilinde Default Argument

  • Writer: Yusuf Hançar
    Yusuf Hançar
  • May 22, 2023
  • 2 min read

C++ dilinde bir fonksiyonun parametrelerine varsayılan değerler atamak için kullanılır. Bir fonksiyon çağrıldığında; argüman geçilmemişse veya boş bırakılmışsa, default argument kullanılır. Default argument, fonksiyonun tanımında belirli bir parametreye atanan bir değerdir.


int smart_code(int val1, int val2, int val3 = 5);

int main()
{
    smart_code(1, 2, 3);
    smart_code(1, 2);       
}
*****************************
AÇIKLAMA : ikinci kod çağrısında 3. parametre default 5 gönderildi.
*****************************
CEVAP    : 
*****************************
int smart_code(int val = 5);

int func_def(int mx, int my, int mz = smart_code());

int main() 
{ 
    func_def(5, 6);      
}
*****************************
AÇIKLAMA : 3. parametre default smart_code fonksiyonu geri dönüşüne göre gönderildi.
*****************************
CEVAP    : 
*****************************
int smart_code(int mx, int my = 6, int mz);

int main() 
{         
}
*****************************
AÇIKLAMA : default argument bildirilen ifadenin sağındakilere de default argument geçilmek zorundadır. mz default argument alırsa legal olacaktır.
*****************************
CEVAP    : syntax error
*****************************
void smart_code (int mx, int my, int mz);
void smart_code (int mx, int my, int mz = 5);       
*****************************
AÇIKLAMA : redeclearation olur legal olur. derleyici ikisini birleştirir.
*****************************
CEVAP    : 
*****************************
void smart_code (int mx, int my, int mz = 5);
void smart_code (int mx, int my = 6, int mz);     
*****************************
AÇIKLAMA : redeclearation olur legal olur. derleyici ikisini birleştirir.
*****************************
CEVAP    : 
*****************************
#include <cstdlib>

char* _itoa(int Value,  char* _Buffer, int _Radix = 5);

int main()
{
    int x;
    cout << "sayi gir: ";
    cin >> x;

    char str[200];

    _itoa(x, str);          
}
*****************************
AÇIKLAMA : _itoa çağrısında =5 olan 3.argüman olarak çağırıldı.
*****************************
CEVAP    : 
*****************************
int arr[5];

void smart_code(int *ptr = arr);       
*****************************
AÇIKLAMA : array to pointer conversion
*****************************
CEVAP    : 
*****************************
void smart_code(int mx, int my, int mz);

void func_def(int mx, int mz, int my = 5)
{
    smart_code(mx, my, mz);
}

int main()
{
    return 0;
}
*****************************
AÇIKLAMA : 
*****************************
CEVAP    : 
*****************************
int val{ 5 };

void smart_code(int& rval = val);
*****************************
AÇIKLAMA : referanslarda default argument alabilir.
*****************************
CEVAP    : 
*****************************
#include <iostream>

using namespace std;

void smart_code(int mx, int my, int mz = -1);

void smart_code(int mx, int my, int mz)
{
    if (mz == 5)
    {
        cout << "changed default argument's value" << endl;
    }
}

int main()
{
    smart_code(1, 2, 5);
    
    return 0;
}
*****************************
AÇIKLAMA : 
*****************************
CEVAP    : changed default argument's value
*****************************
#include <iostream>

class SmartClass {
private:
    int val;

public:
    SmartClass(int df = 0) 
    {
        val = df;
    }

    void show_val() 
    {
        std::cout << val << std::endl;
    }
};

int main() 
{
    SmartClass sc1;
    sc1.show_val(); 

    SmartClass sc2(123);
    sc2.show_val();  

    return 0;
}
*****************************
AÇIKLAMA : Default argüman kullanarak bir sınıf bir nesnesi ve argüman belirterek bir sınıf bir nesnesini oluşturduk.
*****************************
CEVAP    : 0 
           123
*****************************
#include <iostream>

template <typename T = int>
class SmartClass {
private:
    T val;

public:
    SmartClass(T df = 0) 
    {
        val = df;
    }

    void show_val() 
    {
        std::cout << val << std::endl;
    }
};

int main() 
{
    SmartClass<> sc1;
    sc1.show_val(); 

    SmartClass<double> sc2(1.23);
    sc2.show_val();  

    return 0;
}
*****************************
AÇIKLAMA : Default argüman kullanarak bir template sınıf bir nesnesi ve argüman belirterek bir template sınıf bir nesnesini oluşturduk.
*****************************
CEVAP    : 0 
           1.23
*****************************

NOT : C++ dilinde lambdalar(daha sonra detaylı anlatılacaktır) default argüman alamazlar. Lambdalar, C++'ın fonksiyon nesneleri olarak kabul edilen bir özelliğidir ve lambdalara parametre olarak default argümanlar sağlanamaz. Default argümanlar, sadece işlev şablonları ve işlevler için kullanılabilir.


ree

 
 
 

Recent Posts

See All
C++ Dilinde [[nodiscard]] attribute

C++’ta [[attribute]] (öznitelik) mekanizması, kod hakkında ek bilgi sağlayarak derleyicinin uyarılar vermesine, belirli optimizasyonlar...

 
 
 
C++ Dilinde constinit

C++20'de tanıtılan önemli bir özellik `constinit`'dir; bu özellik, statik depolama süresine sahip değişkenlerin derleme zamanında...

 
 
 

Comments


bottom of page