전부터 C++ 공부를 해왔는데 최근에 학교 공부를 하느라 공부를 하지못해서 오늘부터 공부하면서 정리한 것을 올려보고자 한다. 책은 윤성우의 열혈 C++ 프로그래밍을 주 교재로 하였다.
#include <iostream>
int main(void)
{
int num = 20;
std::cout << "Hello world!" << std::endl;
std::cout << "Hello " << "World!" << std::endl;
std::cout << num << ' ' << 'A';
std::cout << ' ' << 3.14 << std::endl;
return 0;
}
다음과 같이 printf를 대신해 std::cout는 출력을 위함이고 std::endl은 개행을 위함이다.
#include <iostream>
int main(void)
{
int val1;
std::cout << "첫 번째 숫자 입력: ";
std::cin >> val1;
int val2;
std::cout << "두 번째 숫자 입력: ";
std::cin >> val2;
int result = val1 + val2;
std::cout << "덧셈 결과: " << result << std::endl;
return 0;
}
이번 예제에서는 scanf를 대신해 std::cin>>"변수"를 통해 입력을 받을 수 있음을 알 수 있다.
int MyFunc(int num)
{
num++;
return num;
}
int MyFunc(int a, int b)
{
return a+b;
}
int main(void)
{
MyFunc(20);
MyFunc(30, 40);
return 0;
}
동일한 이름의 함수정의를 허용하며 이러한 형태의 함수 정의를 '함수 오버로딩(Function Overloading)'이라고 함!
int MyFuncOne(int num = 7)
{
Return num+1;
}
int MyFuncTwo(int num1 = 5, int num2 = 7)
{
Return num1 + num2;
}
다음과 같이 함수의 매개변수를 디폴트 값을 정해서 선언하는 것이 가능하다.
->부분적 디폴트 값 설정이 가능하며 반드시 오른쪽 매개변수의 디폴트 값부터 채우는 형태로 정의해야함. 그렇지 않으면 컴파일 에러가 발생!
int YourFunc(int num1, int num2 = 20, int num3 = 30) {…} (O)
int WrongFunc(int num1=10, int num2 = 20, int num3) {…} (X)
매크로 함수의 장점 -> 일반적인 함수에 비해서 실행속도의 이점이 있음
매크로 함수의 단점 -> 정의하기가 어려움
#include <iostream>
inline int SQUARE(int x)
{
return x * x;
}
int main(void)
{
std::cout << SQUARE(5) << std::endl;
std::cout << SQUARE(12) << std::endl;
return 0;
}
Namespace를 활용하여 자신만의 이름공간을 만들어서 사용을 하면 같은 함수라도 이름공간::함수명 이렇게 사용할 수 있음
#include <iostream>
namespace BestComImp1
{
void SimpleFunc(void)
{
std::cout << "BestCom이 정의한 함수" << std::endl;
}
}
namespace ProgComImp1
{
void SimpleFunc(void)
{
std::cout << "ProgCom이 정의한 함수" << std::endl;
}
}
int main(void)
{
BestComImp1::SimpleFunc();
ProgComImp1::SimpleFunc();
return 0;
}
:: -> 범위지정 연산자라 하며 이름공간을 지정할 때 사용하는 연산자임.
키워드 using을 이용해서 이름공간을 앞에 굳이 붙이지 않더라도 함수를 사용할 수 있음
#include <iostream>
namespace Hybrid
{
void HyFunc(void)
{
std::cout << "So Simple function!" << std::endl;
std::cout << "In namespace Hybrid!" << std::endl;
}
}
int main(void)
{
using Hybrid::HyFunc;
HyFunc();
return 0;
}
using의 선언으로 HyFunc를 이름공간 Hybrid에서 찾으라는 선언이 됨
using namespace std;
#include <iostream>
using namespace std;
int main(void)
{
int num = 20;
cout << "Hello World!" << endl;
cout << "Hello " << "World!" << endl;
cout << num << ' ' << 'A';
cout << ' ' << 3.14 << endl;
return 0;
}
다음과 같이 하면 편하지만 그만큼 이름충돌이 발생할 확률이 상대적으로 높아짐 --> 적절히 사용하는 것이 중요!
namespace가 AAA:BBB:CCC 이러한 형태로 있는 경우
namespace ABC=AAA:BBB:CCC와 같이 하여 ABC::num1 = 10;과 같이 설정할 수 있음
int val = 100;
int SimpleFunc(void)
{
int val = 20; // 지역변수
val += 3; // 지역 변수 값 증가
::val += 7; // 전역 변수 값 증가
}