Chapter 1. C++의 개요
1. C++
- C++는 C언어를 확장시킨 언어로 C언어의 기능 및 문법을 모두 포함할 뿐 아니라 일부 문법을 사용하기 편하게 개선시킨 언어이다.
- C언어는 절차지향인 반면, C++는 객체지향 언어이다.
- C언어와 다른 C++의 특징
‧ C++ 확장자 : .cpp(C언어 : .c)
‧ 함수 중간에 변수 선언이 가능
‧ 표준 입출력 라이브러리 : iostream(C언어 : stdio.h)
‧ 출력 함수 : std::cout(C언어 : printf)
‧ 입력 함수 : std::cin(C언어 : scanf)
2. C++에서의 입출력
- C++에서의 입출력 라이브러리
‧ C++에서는 iostream이라는 라이브러리를 표준 입출력 라이브러리로 사용하고 있으며 헤더파일 확장자인 .h를 붙이지 않는다.
- cout
std::cout << ; |
‧ C++에서의 출력함수로 C언어에서의 printf의 역할을 한다.
‧ 왼쪽 쉬프트 연산자(<<)뒤에 있는 문자, 문자열 또는 변수의 값을 출력하며 출력하고자 하는 값의 타입이 다를 때는 중간에 왼쪽 쉬프트 연산자(<<)를 구분자로 사용해 출력시킨다.
‧ printf와는 다르게 서식문자를 사용하지 않고 사용하기 때문에 데이터 타입에 따라 출력되며 만약 다른 타입으로 출력하고 싶거나 주소값을 출력하기 위해서는 형변환이 필요하다.
- cin
std::cin >> var; |
‧ C++에서의 입력함수로 C언어에서의 scanf의 역할을 한다.
‧ 오른쪽 쉬프트 연산자(>>)뒤에 있는 변수에 값을 입력받으며 scanf와는 다르게 변수에 Ampersand 연산자(&)를 사용하지 않는다.
‧ 입력받고자 하는 변수가 여러 개일 경우 구분점으로 오른쪽 쉬프트 연산자(>>)를 사용한다.
- endl
std::endl; |
‧ cout과 같이 사용되는 함수로 줄개행 기능과 출력버퍼를 비워주는 기능이 같이 포함되어 있다.
‧ cout이 앞에 없으면 사용이 되지 않고 컴파일에러가 출력된다.
- cout과 cin의 특징
‧ 타입에 관계없이 자체적으로 데이터 타입을 판단해 입출력이 가능하다.
‧ 서식문자와 Ampersand 연산자(&)를 사용하지 않는다.(출력의 경우 주소값을 출력할 때는 Ampersand 연산자(&)사용)
‧ 실수는 유효 자릿수까지 출력하며 경우에 따라 지수 형태로 출력할 때도 있다.
‧ char형 포인터의 경우 입력 시 주소부터 차례대로 문자열을 저장한 후 맨 뒤에 널 문자(\0)를 자동으로 추가해주며 출력 시 주소부터 널 문자(\0) 이전의 문자열만 출력한다.
‧ 오른쪽 쉬프트 연산자(>>)로 문자열 입력 시 공백 문자가 포함된 문자열을 받을 수 없으며(scanf와 동일)오른쪽 쉬프트 연산자(>>) 는 연속적인 데이터만을 받을 수 있기 때문에 공백을 입력의 끝으로 처리한다.
3. C++에서 추가된 기능
- 함수 오버로딩(Function Overloading)
void Func(void) |
‧ 같은 이름의 함수를 정의하는 것으로 이 기능으로 C++에서 함수의 다형성이 구현됐다.
◦ 다향성 : 여러 가지 형태를 가질 수 있는 성질
‧ C언어에서는 오버로딩이 허용 되지 않는 반면, C++에서는 함수 호출시 전달되는 인자를 통해 함수를 구분하고 그에 맞는 함수를 호출이 가능해 오버로딩이 가능하다.
- 디폴트 매개변수(Default Parameter)
void Func(int n1, int n2=1) |
‧ 함수 선언 시 매개변수에 값을 정해줘 기본 값을 만들어 주는 것이며 만약 함수 호출 시 매개변수 값을 넣어주지 않으면 함수에 기본 값으로 값이 전달된다.
‧ 하나의 함수가 마치 여러 일을 하는 것처럼 정의할 수 있어 디폴트 매개변수을 오버로딩에 사용할 수 있다.
‧ 함수를 선언 시 기본 값을 정해줄 때 오른쪽으로부터 차례대로 할당해야 하며 중간에 빈값을 두고 띄엄띄엄 할당해선 안 된다.
- 이름 공간(namespace)
‧ 선언 |
‧ 호출 NS::Func();
|
‧ 개체의 범위를 지정하는 기능을 가진 예약어로 주로 대형 프로젝트에서 함수나 변수의 이름 충돌을 막기 위한 도구로 사용된다.
‧ C++에서는 오버라이딩 개념이 추가 되어 있지 않아 같은 이름의 변수를 두 개 이상 선언할 시 컴파일 에러가 발생한다.
◦ 오버라이딩(Overriding) : 앞서 선언된 같은 이름의 함수나 변수가 있을 시 새로 선언된 함수나 변수로 대체 되는 것으로 함수는 이름과 매개변수 모두 같아야한다.
‧ cout, cin, endl 같은 경우 std라는 이름 공간에 선언된 함수라고 볼 수 있다.
‧ 이름 공간은 중첩해서 내부에 여러 개 선언할 수 있다.
‧ 이름 공간은 using 이라는 예약어를 통해 호출시 이름공간을 지정하지 않고 호출할 수 있다.
※ 범위 지정 연산자(::) : 범위를 지정해주는 연산자로 이 연산자가 붙은 함수나 변수의 범위는 전역으로 바뀌게 되며 범위 내에서 연산자 뒤에 오는 함수 이름이나 변수이름을 찾아 호출한다.
‧ using
◦ 선언 |
◦ 호출
|
◦ 이름 공간을 생략해 호출하게 해줘서 불편함을 줄여준다.
◦ using을 여러 곳에 선언할 시 이름 공간간의 충돌이 발생할 수 있어 적절히 사용해야한다.
◦ 이름 공간을 중첩해 사용했을 시 가장 마지막의 콜론(:) 앞까지의 이름 공간을 생략해준다.
‧ 이름 공간 별칭
◦ 선언 namespace ABC=A::B::C; |
◦ 호출
|
◦ using을 이용하지 않고 namespace를 이용해 새로운 이름을 지어 줄 수도 있다.
◦ using을 이용했을 때 충돌이 자주 일어날 수 있어 namespace를 사용할 때가 충돌을 피하는 방법이 될 때도 있다.
- inline 함수
‧ inline |
‧ #define
|
‧ 매크로 함수의 단점을 보완한 함수로 간편하게 함수 데이터형 앞에 inline 예약어만 붙여주면 선언이 가능하다.
‧ 매크로 함수의 처리는 전처리기가 하지만 inlin 함수의 처리는 컴파일러가 한다.
‧ inline 함수 또한 매크로 함수처럼 치환을 이용하므로 호출 작업이 없기 때문에 처리속도가 빠르지만 전체 코드의 크기를 크게 만든다.
‧ 함수의 크기가 작은 경우에 선언해야하며 함수의 크기가 너무 큰 경우 컴파일러가 무시하기도 해 주의해 사용해야한다.
‧ 매개변수의 데이터형에 의존해 데이터 손실이 있다.
‧ 호출 과정
◦ 매개변수를 전달하기 위해 매개변수를 스택(stack) 영역에 저장한다.
◦ 호출한 곳으로 다시 돌아와야 하므로 함수 호출명령 바로 다음 명령의 주소를 스택(stack) 영역에 저장한다.
◦ 함수가 정의된 주소로 점프해 함수 코드를 치환해 수행한다.
◦ 저장해둔 주소로 복귀한다.
- 데이터형 bool
bool isPos1 = true; |
‧ true와 false 값으로 참과 거짓 판별하는 1Byte 크기의 데이터형이다.
‧ 일반적으로 0은 false를 0이 아닌 숫자는 true로 지정되어 있으며 통상 true는 1로 되어 있다.
‧ C++에서는 true와 false라는 값이 새로 예약어로 생겨나 true와 false를 값으로 지정할 수 있다.
4. 참조자(Reference)
int num1 = 1; |
|
- 참조자
‧ 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름(별명)이다.
‧ 변수에 대한 참조자수는 제한이 없고 참조자를 대상으로 참조자를 선언할 수 있으며 배열에서도 사용가능하다.
※ 변수 : 할당된 메모리 공간에 붙여진 이름
- 참조자와 함수
‧ Call-by-value : 값을 전달받아 리턴하는 형태의 함수
‧ Call-by-reference : 주소값을 전달받아서 함수 외부에 선언된 변수에 접근하는 형태의 함수
- 참조자의 특징
‧ 참조자는 선언 시 Ampersand 연산자(&)를 사용해 선언한다.
‧ 선언과 동시에 초기화를 해야 하며 초기화를 하지 않을 시 쓰레기 값을 갖는다.
‧ 리터럴 상수는 참조자에 대입할 수 없다.
'C++' 카테고리의 다른 글
Chapter 6. C++의 또 다른 기능 (0) | 2015.08.05 |
---|---|
Chapter 5. 연산자 오버로딩(Operator Overloading) (0) | 2015.08.05 |
Chapter 4. 상속(Inheritance) (0) | 2015.08.05 |
Chapter 3. 객체지향 프로그래밍(Object Oriented Programming) (0) | 2015.08.05 |
Chapter 2. C++의 메모리 동적 할당 (0) | 2015.08.05 |