C++

9-2 디폴트 인자(매개변수)

리버윤 2023. 11. 15. 11:55
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