C++ Dilinde Default Argument
- 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.

Comments