안녕하세요. 우당탕탕 개발일지입니다. 열혈 C++책으로 C++ 문법을 다시 정리하려고 합니다. 간단하게 내용 요약하고 문제푼 코드를 올립니다. 한번 올라가는 분량이 적습니다. 가벼운 마음으로 봐주세요. 아자아자 소프트!
♠내용요약 ♠ p27~32
1) 디폴트 값= 기본적으로 설정된 값.
=> 함수 호출 시 인자를 전달하지 않는다면 디폴트 값을 전달하겠다.
2) 디폴트로 선언된 매개변수의 수보다 적은 수의 인자 전달이 가능하다.
=> 전달되지 않은 인자는 디폴트 값을 전달함.
3) 함수의 원형을 별도로 선언하는 경우, 매개변수의 디폴트 값은 함수의 원형 선언에만 위치 시켜야 한다.
=> 왜냐하면 코드가 실행되면 순차적으로 코드는 읽는데 디폴트 값을 정의 부분에 적어두면 읽지 못해 에러가 발생하기 때문이다.
4) 디폴트 값은 무조건 오른쪽부터 채운다.
=> 함수에 전달하는 인자는 왼쪽부터 채워지러 가기 때문에 오른쪽 디폴트 값을 비우는 형태로는 올바른 출력 결과를 낼 수 없다.
#include <iostream>
int Adder(int num1=1, int num2=2);
int main(void)
{
std::cout<<Adder()<<std::endl; // 출력값 =3
std::cout<< Adder(5)<<std::endl; //출력값= 7
std::cout<<Adder(3,5)<<std::endl;// 출력값=8
return 0;
}
int Adder(int num1, int num2)
{
return num1+num2;
}
문제 1번
디폴트 매개변수 방식 -> 함수 오버로딩으로 고치기 (단, 출력결과 동일하게)
#include<iostream>
int BoxVolume(int lenght, int width=1, int height=1);
int main(void)
{
std::cout << "[3,3,3] : " << BoxVolume(3, 3, 3) << std::endl;
std::cout << "[5,5,D] : " << BoxVolume(5, 5) << std::endl;
std::cout << "[7,D,D] : " << BoxVolume(7) << std::endl;
std::cout << "[D,D,D] : " << BoxVolume() << std::endl; //error
}
int BoxVolume(int lenght, int width, int height)
{
return lenght*width*height;
}
정답 1번
#include<iostream>
int BoxVolume(int lenght, int width, int height);
int BoxVolume(int lenght, int width);
int BoxVolume(int lenght);
int main(void)
{
std::cout << "[3,3,3] : " << BoxVolume(3, 3, 3) << std::endl;
std::cout << "[5,5,D] : " << BoxVolume(5, 5) << std::endl;
std::cout << "[7,D,D] : " << BoxVolume(7) << std::endl;
//std::cout << "[D,D,D] : " << BoxVolume() << std::endl; //error
}
int BoxVolume(int lenght, int width, int height )
{
return lenght*width*height;
}
int BoxVolume(int lenght, int width)
{
return lenght * width * 1;
}
int BoxVolume(int lenght)
{
return lenght * 1 * 1;
}
열혈 C++ 프로그래밍 ch
문제 2번
다음과 같은 형태의 함수 오버로딩은 문제가 있다. 어떤 문제인지 설명해보자.
int SimpleFunc(int a=10)
{
return a+1;
}
int SimpleFunc(void)
{
return 10;
}
정답 2번
함수 오버로딩이 되려면 매개변수의 자료형이 다르거나 매개변수의 개수가 달라야 한다. 위에 코드 같은 경우 오버로딩 조건을 만족해 컴파일은 된다. 하지만 두 함수 모두 호출 조건을 만족해 컴파일 에러가 발생한다.
728x90
'[프로그래밍 언어] > C,C++' 카테고리의 다른 글
[C언어] 배열(array)_ 개념 문제 (1번 ~5번) 답지 (1) | 2024.10.11 |
---|---|
[C언어] 배열(array)_ 개념 문제 (1번 ~5번) (1) | 2024.10.11 |
열혈 C++ 프로그래밍 ch 01-4 인라인 함수 (inline) (0) | 2024.07.05 |
열혈 C++ 프로그래밍 ch 01-2 함수 오버로딩 (0) | 2024.03.28 |
열혈 C++ 프로그래밍 ch 01-1 printf와 scanf를 대신하는 입출력 방식 (0) | 2024.03.20 |