C++ 기초!!
C++ 기초!!
iostream은 C++에 있는 입출력을 위한 헤더 파일이다. 이는 C++ 표준 라이브러리의 하나이다. Input/Output Stream(입출력 스트림)에서 이름을 따왔다. C 프로그래밍 언어의 stdio.h와 같은 역할을 한다.
사용 예[편집]
보통 Hello world 프로그램에서는 다음과 같이 표현한다 :
이 프로그램은 새 줄 문자에 "Hello, world!"를 출력한다.
출력 포매팅[편집]
메서드[편집]
width(int x) | 다음 출력을 위한 문자의 최소 숫자 |
fill(char x) | 최소 채워진 길어지도록 길이 필요한 경우 안의 채워져 쓰여진 문자 |
precision(int x) | 플로팅-포인트 숫자를 위한 중요한 셈의 숫자 설정 |
예제:
cout == output
cin == input
예제 2: scanf를 대신하는 데이터 입력
#include <iostream>
int main(void)
{
int val1;
std::cout << "첫번째 정수 입력 : ";
std::cin >> val1; // std::cin은 C언어에서의 스트림 stdin에 해당
int val2; // C++에서는 지역변수를 아무 곳에서나 선언 가능
std::cout << "두번째 정수 입력 : ";
std::cin >> val2;
int result = val1 + val2;
std::cout << "덧셈 결과 : " << result << std::endl;
system("pause"); // VC++ 에서만 필요
return 0;
}
예제 4: 배열 기반의 문자열 입출력
#include <iostream>
int main(void)
{
char name[100];
char lang[200];
std::cout << "이름은 무엇입니까? ";
std::cin >> name;
std::cout << "좋아하는 프로그래밍 언어는 무엇인가요? ";
std::cin >> lang;
std::cout << "내 이름은 " << name << "입니다." << std::endl;
std::cout << "좋아하는 프로그래밍 언어는 " << lang << "입니다." << std::endl;
system("pause"); // VC++ 에서만 필요
return 0;
}
#include <iostream> int main(void) { char name[100]; char lang[200]; std::cout << "이름은 무엇입니까? "; std::cin >> name; std::cout << "좋아하는 프로그래밍 언어는 무엇인가요? "; std::cin >> lang; std::cout << "내 이름은 " << name << "입니다." << std::endl; std::cout << "좋아하는 프로그래밍 언어는 " << lang << "입니다." << std::endl; system("pause"); // VC++ 에서만 필요 return 0; }
예제 1: 함수 오버로딩
#include <iostream>
void MyFunc(void);
void MyFunc(char c);
void MyFunc(int a, int b);
int main(void)
{
MyFunc();
MyFunc('A');
MyFunc(12, 13);
system("pause"); // VC++ 에서만 필요
return 0;
}
void MyFunc(void)
{
std::cout << "MyFunc(void) called" << std::endl;
}
void MyFunc(char c)
{
std::cout << "MyFunc(char c) called" << std::endl;
}
void MyFunc(int a, int b)
{
std::cout << "MyFunc(int a, int b) called" << std::endl;
}
예제 1: 매크로 함수 (복습)
메크로 함수는 #define을 통해서 메크로를 생성하고 실제 main에서 호출시 define 된 데이터 값을 처리하여 출력하게 하는 방식
#include <iostream> #define SQUARE(x) ((x)*(x)) int main(void) { std::cout << SQUARE(5) << std::endl; // int형에 적용 std::cout << SQUARE(2.7) << std::endl; // double형에 적용 system("pause"); // VC++ 에서만 필요 return 0; }
예제 2: C++ 기반의 인라인 함수 정의
인라인도 위와 동일하나 단순 연산에 대한 값 뿐아니라 인라인 안에서 처리를 하고 return 값을 통해 출력
#include <iostream>
inline int SQUARE(int x)
{
return x*x;
}
int main(void)
{
std::cout << SQUARE(5) << std::endl;
std::cout << SQUARE(7.15) << std::endl; // 7.15를 7로 간주 데이터 손실
system("pause"); // VC++ 에서만 필요
return 0;
}
예제 3: template 통한 임의의 자료형(뒤에서 자세히 공부함)
임의의 자료형T 의 객체를 생성하고 그 연산 값을 출력하는것 뒤에 자세히 공부한다고 함
#include <iostream> template <typename T> inline T SQUARE(T x) { return x*x; } int main(void) { std::cout << SQUARE(5) << std::endl; std::cout << SQUARE(7.154) << std::endl; system("pause"); // VC++ 에서만 필요 return 0; }
예제 1: 범위지정 연산자 :: 와 이름공간
네임스페이스
#include <iostream>
namespace Company1
{
void func(void)
{
std::cout << "Company1 이 정의한 함수" << std::endl;
}
}
namespace Company2
{
void func(void)
{
std::cout << "Company2 이 정의한 함수" << std::endl;
}
}
int main(void)
{
Company1::func();
Company2::func();
system("pause"); // VC++ 에서만 필요
return 0;
}
예제 2: 이름 공간 기반의 함수 선언과 정의의 구분
내임스페이스를 토대로 함수를 선언해 두고 네임스페이스::함수를 통해서 각각의 함수를 정의
#include <iostream>
namespace Company1
{
void func(void);
}
namespace Company2
{
void func(void);
}
int main(void)
{
Company1::func();
Company2::func();
system("pause"); // VC++ 에서만 필요
return 0;
}
void Company1::func(void)
{
std::cout << "Company1 이 정의한 함수" << std::endl;
}
void Company2::func(void)
{
std::cout << "Company2 이 정의한 함수" << std::endl;
}
예제 3: 동일한 이름 공간에 정의된 함수 호출
다른 네임스페이스에 함수를 선언/정의 하고 main에서 A의 네임스페이스의 함수를 호출 한 후
A의 함수 내에 B의 함수를 호출 함으로서 다른 네임 스페이스의 함수값을 호출 하는 것이 가능
#include <iostream>
namespace Company1
{
void func(void);
void hello(void); // 각각의 함수마다 이름공간으로 에워 싸도 됨
}
namespace Company2
{
void func(void);
}
int main(void)
{
Company1::func();
system("pause"); // VC++ 에서만 필요
return 0;
}
void Company1::hello(void)
{
std::cout << "hello" << std::endl;
}
void Company1::func(void)
{
std::cout << "Company1 이 정의한 함수" << std::endl;
hello(); // 같은 이름공간의 함수는 이름공간 생략 가능, 즉 Company1::hello()
Company2::func(); // 다른 이름공간의 함수
}
void Company2::func(void)
{
std::cout << "Company2 이 정의한 함수" << std::endl;
}
예제 4: 이름 공간의 중첩
이건 단순 부모 자식 관계 설명
#include <iostream>
namespace Parent
{
int num = 0;
namespace Son
{
int num = 1;
}
namespace Daughter
{
int num = 2;
}
}
int main(void)
{
std::cout << Parent::num << std::endl;
std::cout << Parent::Son::num << std::endl;
std::cout << Parent::Daughter::num << std::endl;
system("pause"); // VC++ 에서만 필요
return 0;
}
예제 5: using을 이용한 이름 공간의 명시
using NameSpace::Function 을 이용하면 main에서 이후의 함수 호출 시 네임스페이스를 생략하는 것이 가능
#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; // 이 라인 실행후 namespace Hybrid는 생략 가능
HybFunc();
system("pause"); // VC++ 에서만 필요
return 0;
}
예제 6: 프로그램 전체에 영향을 미치는 using의 선언 방법
함수 호출에 있어서 네임스페이스를 미리 선언 함으로서 코드의 단순화가 가능
using namspace::함수;
참고 : std 는 표준 C++ 라이브러리
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main(void)
{
int num = 20;
cout << "Hello World!" << endl;
cout << "Hello " << "World!" << endl;
cout << num << ' ' << 'A';
cout << ' ' << 3.14 << endl;
system("pause"); // VC++ 에서만 필요
return 0;
}
예제 7: 이름 공간 std
using namespace std를 하면 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;
system("pause"); // VC++ 에서만 필요
return 0;
}
예제 8: 이름 공간의 별칭
namespace도 객체로서 부모 자식 관계로 선언하는것이 가능하며
AAA
{
BBB
{
CCC
{
string a;
}
}
}
namespace ABC = AAA::BBB::CCC;
cout << ABC::a <<endl;
와 같은 방식을 통해 네임스페이스를 호출 할때 단순화가 가능
#include <iostream>
using namespace std;
namespace AAA
{
namespace BBB
{
namespace CCC
{
int num1;
int num2;
}
}
}
int main(void)
{
AAA::BBB::CCC::num1 = 20;
AAA::BBB::CCC::num2 = 30;
namespace ABC = AAA::BBB::CCC;
cout << ABC::num1 << endl;
cout << ABC::num2 << endl;
system("pause"); // VC++ 에서만 필요
return 0;
}
예제 9: 범위 지정 연산자 :: 의 또 다른 기능
using namespace Namespace 를 통해서 전역 네임스페이스를 설정하고
int val; 을 통해 지역 변수를 생성한 후
int main(void)
{
val += 3; 지역 변수 변경;
::val += 3; 을 통해 전역 변수의 값을 변경하는 것도 가능(std::val 의 의미)
}
#include <iostream> using namespace std; int val = 100; int main(void) { int val = 20; // 지역 변수 val += 3; // 지역 변수 val의 값 증가 ::val += 3; // 전역변수 val의 값 증가 cout << "지역변수 val의 값: " << val << endl; cout << "전역변수 val의 값: " << ::val << endl; system("pause"); // VC++ 에서만 필요 return 0; }
댓글
댓글 쓰기