728x90
- 디폴트 인자(매개변수) (default parameter, default argument)
- C++에서는 함수를 호출할 때 별도의 매개변수를 전달하지 않아도 기본적인 값을 전달하도록 함수 원형을 선언할 때 디폴트 값을 지정할 수 있다.
- 해당 매개변수가 주어지지 않으면 디폴트 인자 값이 할당된다.
- 일단 디폴트 매개변수를 정의하기 시작하면 그 다음(오른쪽)의 매개변수들은 모두 디폴트 매개변수를 가져야 한다.
- int add(int i=1, int j); //오류
- int add(int j, int i =1); //가능, i는 줘야하고 j는 주지 않아도 될 경우 i와 j의 자리를 바꿔주면 된다.
#include <iostream>
int add(int i=1, int j=2) // 형식매개변수
{
return(i + j);
}
int main()
{
std::cout << add() << ","; // 실매개변수 없음, 3
std::cout << add(10) << ","; // 실매개변수 한 개, 12
std::cout << add(10, 20); // 실매개변수 두개, 30
return 0;
}
결과 => 3, 12, 30
- main()함수 전에 함수 선언을 할 경우, 선언부에만 디폴트 인자를 지정해야 한다.
#include <iostream>
int add(int i = 1, int j = 2); //선언
int main()
{
std::cout << add() << ",";
std::cout << add(10) << ",";
std::cout << add(10, 20);
return 0;
}
int add(int, int) //이렇게 선언과 정의를 나눠놓을 때 정의할 때는 안적어도 됨.
{
return(i + j);
}
- 디폴트 인자를 갖는 생성자
#include <iostream>
class Dog {
private:
int age;
public:
Dog(int a = 1) { age = a; }
//Dog() { age = 1; }
// 디폴트 매개변수를 갖는 생성자
~Dog();
int getAge();
void setAge(int a);
};
Dog::~Dog()
{
std::cout << "소멸\n";
}
int Dog::getAge()
{
return age;
}
void Dog::setAge(int a)
{
age = a;
}
int main()
{
Dog meri, happy(5); //meri에 매개변수가 없어서 6번째 줄 디폴트 매개변수가 없으면 오류발생함.
std::cout << happy.getAge() << "," <<
meri.getAge() << std::endl;
return 0;
}
#include <iostream>
class Dog {
private:
int age;
public:
Dog(int a = 1);
//Dog() { age = 1; }
// 디폴트 매개변수를 갖는 생성자
~Dog();
int getAge();
void setAge(int a);
};
Dog::Dog(int a){ //선언부에만 작성하기
age = a;
}
Dog::~Dog()
{
std::cout << "소멸\n";
}
int Dog::getAge()
{
return age;
}
void Dog::setAge(int a)
{
age = a;
}
int main()
{
Dog meri, happy(5);
std::cout << happy.getAge() << "," <<
meri.getAge() << std::endl;
return 0;
}
- 디폴트 인자 응용
#include <iostream>
int Gop(int i, int j, int k = 1, int l = 1)
{
return(i * j * k * l);
}
int main()
{
std::cout << Gop(1, 2) << std::endl; // 1*2*1*1
std::cout << Gop(1, 2, 3) << std::endl; // 1*2*3*1
std::cout << Gop(1, 2, 3, 4) << std::endl;// 1*2*3*4
return 0;
}
728x90