SH1R0_HACKER
Chapter01 C언어 기반의 C++ 1 본문
Part 01 C++로의 전환
Chapter 01 C언어 기반의 C++ 1
01-1 printf와 scanf를 대신하는 입출력 방식
1) 문자열 "Hello World"의 출력
#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;
}
2) scanf를 대신하는 데이터의 입력
#include <iostream>
int main(void)
{
int val1 = 0;
std::cout << "첫 번째 숫자 입력: ";
std::cin >> val1;
int val2 = 0;
std::cout << "두 번째 숫자 입력: ";
std::cin >> val2;
int result = val1 + val2;
std::cout << "덧셈결과 : " << result << std::endl;
return 0;
}
01-2 함수 오버로딩(Function Overloading)
- 함수호출 시 전달되는 인자를 통해서 호출하고자 하는 함수의 구분이 가능하다.
- C++은 호출할 함수를 찾을 때 '함수의 이름', '매개변수의 선언' 두 가지 정보를 동시에 활용하지만, C언어는 함수의 이름만을 이용해서 호출대상을 찾는다. 때문에 C언어에서는 함수의 오버로딩이 불가능, 문법적으로도 허용하지 않는다.
- 함수 오버로딩이 가능하려면 '매개변수 자료형 또는 개수가 다르면' 된다. 반면에 반환형이 다르다면 컴파일 오류
#include <iostream>
void swap(int* num1, int* num2);
void swap(char* ch1, char* ch2);
void swap(double* db11, double* db12);
int main(void)
{
int num1 = 20, num2 = 30;
swap(&num1, &num2);
std::cout << num1 << ' ' << num2 << std::endl;
char ch1 = 'A', ch2 = 'Z';
swap(&ch1, &ch2);
std::cout << ch1 << ' ' << ch2 << std::endl;
double db11 = 1.111, db12 = 5.555;
swap(&db11, &db12);
std::cout << db11 << ' ' << db12 << std::endl;
return 0;
}
void swap(int* num1, int* num2)
{
int num3 = *num1;
*num1 = *num2;
*num2 = num3;
}
void swap(char* ch1, char* ch2)
{
char ch3 = *ch1;
*ch1 = *ch2;
*ch2 = ch3;
}
void swap(double* db11, double* db12)
{
double db13 = *db11;
*db11 = *db12;
*db12 = db13;
}
01-3 매개변수의 디폴트 값(Default Value)
#include <iostream>
int BoxVolume(int length, 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;
}
int BoxVolume(int length, int width, int height)
{
return length * width * height;
}
01-4 인라인(inline) 함수
- 함수의 몸체부분이 함수호출 문장을 완전히 대체했을 때 '함수가 인라인화 되었다' 라고 표현한다.
- 강의 : https://youtu.be/XA_kkIC2uD4
< 아래 예제는 매크로 함수를 이용하지 않는, C++ 기반의 인라인 함수의 정의방법을 보이고 있다. >
#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;
}
01-5 이름공간(namespace)에 대한 소개
< 이름공간 기반의 함수 선언과 정의의 구분 >
- 동일한 이름공간에 정의된 함수를 호출할 때에는 이름공간을 명시할 필요가 있다.
#include <iostream>
namespace BestComImp1
{
void SimpleFunc(void);
}
namespace BestComImp1
{
void PrettyFunc(void);
}
namespace ProgComImp1
{
void SimpleFunc(void);
}
int main(void)
{
BestComImp1::SimpleFunc();
return 0;
}
void BestComImp1::SimpleFunc(void)
{
std::cout << "BestCom이 정의한 함수" << std::endl;
PrettyFunc(); // 동일 이름공간
ProgComImp1::SimpleFunc(); // 다른 이름공간
}
void BestComImp1::PrettyFunc(void)
{
std::cout << "So Pretty!!" << std::endl;
}
void ProgComImp1::SimpleFunc(void)
{
std::cout << "ProgCom이 정의한 함수" << std::endl;
}
< using을 이용한 이름공간의 명시 >
#include <iostream>
namespace Hybrid
{
void HybFunc(void)
{
std::cout << "So simple function!" << std::endl;
std::cout << "In namespace Hybrid!" << std::endl;
}
}
int main(void)
{
using Hybrid::HybFunc;
// 키워드 using을 이용해서 '이름공간 Hybrid에 정의된 HybFunc를
// 호출할 때에는, 이름공간을 지정하지 않고 호출하겠다!'는 것을
// 명시(선언)하고 있다.
HybFunc(); // using 선언을 통해서 이름공간의 지정없이 HybFunc 함수를 호출하고 있다.
return 0;
}
< 이름공간의 별칭 지정 >
- 이름공간이 중첩되면서까지 과도하게 사용이 되었을 때, 별칭을 줄 수 있다.
#include <iostream>
using namespace std;
namespace AAA
{
namespace BBB
{
namespace CCC
{
int num1;
int num2;
}
}
}
int main(void)
{
// 별칭이 선언되기 이전의 변수 num1과 num2의 접근
AAA::BBB::CCC::num1 = 20;
AAA::BBB::CCC::num2 = 30;
namespace ABC = AAA::BBB::CCC; // AAA::BBB::CCC 에 ABC라는 별칭을 붙여주고 있다.
// 별칭의 선언 이후의 접근을 보이고 있다.
cout << ABC::num1 << endl;
cout << ABC::num2 << endl;
return 0;
}
< 범위지정 연산자의 또 다른 기능 >
- 지역변수의 이름이 전역변수의 이름과 같을 경우, 전역변수는 지역변수에 의해 가려진다.
- 전역변수에 접근하기 위해서는 '범위지정 연산자 (::)'를 사용하면 된다.
#include <iostream>
using namespace std;
int val = 100; // 전역변수
int main(void)
{
int val = 20; // 지역변수
val += 3; // 지역변수의 val의 값 3 증가
::val += 7; // 전역변수 val의 값 7 증가
cout << "지역변수 val : " << val << endl; // 23 출력
cout << "전역변수 val : " << ::val << endl; // 107 출력
}
'Programming Language > C++' 카테고리의 다른 글
Chapter04 클래스의 완성 (작성중) (0) | 2020.10.18 |
---|---|
Chapter03 클래스의 기본 (0) | 2020.10.18 |
Chapter02 C언어 기반의 C++ 2 (0) | 2020.10.18 |
Chapter02의 시작에 앞서 (C언어의 복습을 유도하는 확인학습 문제) (0) | 2020.10.18 |