# C++의 입·출력
ㆍcout과 <<을 이용한 출력(printf)
ㆍendl을 이용한 개행(\n)
ㆍcin과 >>을 이용한 입력(scnaf)
※ C++에서는 데이터의 입출력이 별도의 포맷지정이 없이 사용이 가능하다.
※ 헤더파일의 확장자는 C언어와 마찬가지로 .h이다. 그러나 C++에서는 프로그래머가 정의하는 헤더파일의
선언이 아닌, 표준 헤더파일의 선언에서는 확장자를 생략하기로 약속되어있다.
# 함수 오버로딩
오버로딩이 가능하다. 반면 C언어는 함수의 이름만 이용하기때문에 오버로딩이 불가능하다.
# 매개변수의 디폴트 값
※ 함수 호출시 인자를 전달하지 않으면 num1은 1, num2는 2가 전달된 것으로 간주하겠다는 뜻이다.
※ 디폴트 값은 함수의 선언 부분에만 표현하면 되고 함수에 전달되는 인자는 왼쪽에서부터 오른쪽으로 채워지기
때문에 반드시 오른쪽 매개변수의 디폴트 값부터 채우는 형태여야 한다.
# 인라인(inline) 함수
C의 매크로 함수와 비슷하며 C++ 기반의 인라인 함수의 정의 방법은 다음과 같다.
단, 인라인 함수는 매크로 함수의 자료형에 의존적이지 않는 함수를 만들 수는 없다. (템플릿을 이용)
※ 매크로를 이용한 함수의 인라인화는 전처리기에 의해서 처리되지만, 키워드 inline을 이용한 함수의 인라인화는
컴파일러에 의해서 처리가된다. 따라서 컴파일러는 함수의 인라인화가 오히려 성능에 해가 된다고 판단할 경우,
이 키워드를 무시해버리기도 한다. 또한 컴파일러는 필요한 경우 일부 함수를 임의로 인라인 처리하기도 한다.
# 이름공간(namespace)
프로젝트가 대형화 되었을때 각각의 회사가 함수를 만들면 이름이 겹치는 경우가 있다. 그래서 C++의 표준에서는
'이름공간(namespace)'이라는 문법을 정의해서 이러한 문제에 대한 근본적인 해결책을 제시하고 있다.
이름공간을 지정할 때 사용하는 연산자이다. 이외에도 다양하게 사용된다.
위에서도 사용된 using을 이용한 이름공간의 명시는 이름공간을 지정하지 않고 호출하겠다라는 말한다.
using std::cout; // cout을 이름공간 std에서 찾아라
std는 cout,cin,endl..이외에도 많은 함수들이 선언되어있는 이름공간이다.
using namespace std라고 사용할 경우 using을 세번이나 선언하는 번거로움이 없어지는 반면에 그만큼 이름충돌이
발생할 확률은 상대적으로 높아진다.
#include <iostream>
usingstd::cin;
usingstd::cout;
usingstd::endl;
int main(void)
{
int val;
cout<<"Hello World!"<<endl;
cout<<"숫자 입력 :";
cin>>val;
cout<<val<<endl;
return0;
}
ㆍcout과 <<을 이용한 출력(printf)
ㆍendl을 이용한 개행(\n)
ㆍcin과 >>을 이용한 입력(scnaf)
※ C++에서는 데이터의 입출력이 별도의 포맷지정이 없이 사용이 가능하다.
※ 헤더파일의 확장자는 C언어와 마찬가지로 .h이다. 그러나 C++에서는 프로그래머가 정의하는 헤더파일의
선언이 아닌, 표준 헤더파일의 선언에서는 확장자를 생략하기로 약속되어있다.
# 함수 오버로딩
#include <iostream>※ C++은 호출할 함수를 찾을때 '함수의 이름', '매개변수의 선언' 이 두 가지 정보를 동시에 활용하기때문에
usingstd::cin;
usingstd::cout;
usingstd::endl;
void MyFunc(void)
{
cout<<"MyFunc(void) called"<<endl;
}
void MyFunc(char c)
{
cout<<"MyFunc(char c) called"<<endl;
}
void MyFunc(int a, int b)
{
cout<<"MyFunc(int a, int b) called"<<endl;
}
int main(void)
{
MyFunc();
MyFunc('A');
MyFunc(12, 13);
return0;
}
오버로딩이 가능하다. 반면 C언어는 함수의 이름만 이용하기때문에 오버로딩이 불가능하다.
# 매개변수의 디폴트 값
#include <iostream>
usingstd::cin;
usingstd::cout;
usingstd::endl;
int Adder(int num1=1, int num2=2);
int main(void)
{
cout<<Adder()<<endl;
cout<<Adder(5)<<endl;
cout<<Adder(3, 5)<<endl;
return0;
}
int Adder(int num1, int num2)
{
return num1+num2;
}
※ 함수 호출시 인자를 전달하지 않으면 num1은 1, num2는 2가 전달된 것으로 간주하겠다는 뜻이다.
※ 디폴트 값은 함수의 선언 부분에만 표현하면 되고 함수에 전달되는 인자는 왼쪽에서부터 오른쪽으로 채워지기
때문에 반드시 오른쪽 매개변수의 디폴트 값부터 채우는 형태여야 한다.
# 인라인(inline) 함수
C의 매크로 함수와 비슷하며 C++ 기반의 인라인 함수의 정의 방법은 다음과 같다.
inlineint SQUARE(int x)매크로 함수는 정의하기가 복잡하지만 인라인함수는 일반 함수처럼 정의가 가능하다.
{
return x*x;
}
int main(void)
{
std::cout<<SQUARE(5)<<std::endl;
std::cout<<SQUARE(12)<<std::endl;
return0;
}
단, 인라인 함수는 매크로 함수의 자료형에 의존적이지 않는 함수를 만들 수는 없다. (템플릿을 이용)
※ 매크로를 이용한 함수의 인라인화는 전처리기에 의해서 처리되지만, 키워드 inline을 이용한 함수의 인라인화는
컴파일러에 의해서 처리가된다. 따라서 컴파일러는 함수의 인라인화가 오히려 성능에 해가 된다고 판단할 경우,
이 키워드를 무시해버리기도 한다. 또한 컴파일러는 필요한 경우 일부 함수를 임의로 인라인 처리하기도 한다.
# 이름공간(namespace)
프로젝트가 대형화 되었을때 각각의 회사가 함수를 만들면 이름이 겹치는 경우가 있다. 그래서 C++의 표준에서는
'이름공간(namespace)'이라는 문법을 정의해서 이러한 문제에 대한 근본적인 해결책을 제시하고 있다.
#include <iostream>※ 연산자 :: 을 가리켜 '범위지정 연산자(scope resolution operator)'라 하며, 그 이름이 의미하듯이
namespace BestComImpl // 'BestComImpl'의 이름공간의 이름
{
void SimpleFunc(void);
}
namespace ProgComImpl // 'ProgComImpl'의 이름공간의 이름
{
void SimpleFunc(void);
}
int main(void)
{
BestComImpl::SimpleFunc();
ProgComImpl::SimpleFunc();
return0;
}
void BestComImpl::SimpleFunc(void)
{
std::cout<<"BestCom이 정의한 함수"<<std::endl;
}
void ProgComImpl::SimpleFunc(void)
{
std::cout<<"ProgCom이 정의한 함수"<<std::endl;
}
이름공간을 지정할 때 사용하는 연산자이다. 이외에도 다양하게 사용된다.
위에서도 사용된 using을 이용한 이름공간의 명시는 이름공간을 지정하지 않고 호출하겠다라는 말한다.
using std::cout; // cout을 이름공간 std에서 찾아라
std는 cout,cin,endl..이외에도 많은 함수들이 선언되어있는 이름공간이다.
using namespace std라고 사용할 경우 using을 세번이나 선언하는 번거로움이 없어지는 반면에 그만큼 이름충돌이
발생할 확률은 상대적으로 높아진다.
'프로그래밍 > C/C++' 카테고리의 다른 글
C++ :: 클래스의 기본, 클래스와 객체, 객체지향 프로그래밍 (0) | 2010.08.12 |
---|---|
C++ :: bool형, 참조자(Reference), new & delete, C표준함수 호출 (0) | 2010.08.12 |
C :: 퀵소트 라이브러리 함수 사용법 (0) | 2010.06.30 |
C :: 비트 연산자 (1) | 2010.05.26 |
C :: Borland C++ conio.h에 포함된 함수 구현 (0) | 2010.05.22 |
댓글 로드 중…