C++
특징
객체 지향 프로그래밍 언어이다.
일반화 프로그래밍 언어이다.
네임스페이스(namespace)
C++프로그램을 작성할 때 발생하는 이름에 대한 충돌을 방지해 주는 방법을 제공한다.
네임스페이슨 C언어에는 없는 C++만의 새로운 기능이다.
삼항 연산자(ternary operator)
문법
조건식 ? 반환값1 : 반환값2
?앞의 조건식에 따라 결과값이 참이면 반환값1을 반환하고, 결과값이 거짓이면 반환값2를 반환한다.
포인터란?
C++에서 포인터(pointer)란 메모리의 주소값을 저장하는 변수이며, 포인터 변수라고도 부른다.
포인터 연산자
- 주소 연산자(&)
변수의 이름 앞에 사용하며, 해당 변수의 주소값을 반환한다.
'&' 기호는 앰퍼샌드(ampersand)라고 읽으며, 번지 연산자라고도 부른다. - 참조 연산자(*)
포인터의 이름이나 주소 앞에 사용하여, 포인터에 저장된 주소에 저장되어 있는 값을 반환한다.
int x = 7; // 변수의 선언
int *ptr = &x; // 포인터의 선언
int **pptr = &ptr; // 포인터의 참조
int num1 = 1234;
double num2 = 3.14;
int* ptr_num1 = &num1;
double* ptr_num2 = &num2;
- cout<<ptr_num1 - 0x7fff789fab54 (num1의 주소값)
- cout<<*ptr_num1 - 1234 (0x7fff789fab54 주소에 들어있는 값)
메모리의 동적할당(dynamic allocation)
C++에서
new 연산자는
타입* 포인터이름 = new 타입;
new연산자는 자유 기억 공간(free store)이라고 불리는 메모리 공간(memory pool)에 객체를 위한 메모리를 할당받는다.
또한, new 연산자를 통해 할당받은 메모리는 따로 이름이 없으므로 해당 포인터로만 접근할 수 있게 된다.
delete 연산자는
delete 포인터이름;
delete연산자를 사용하여, 더는 사용하지 않는 메모리를 다시 메모리 공간에 돌려줄 수 있다.
구조체(structure type)
사용자가 c++의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입이다.
구조체는 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있다.
인수 전달 방법
- 값에 의한 전달 ( call by value)
값에 의한 전달 방법은 인수로 전달되는 변수가 가지고 있는 값을 함수 내의 매개변수에 복사하는 방식
이렇게 복사된 값으로 초기화된 매개변수는 인수로 전달된 변수와는 완전히 별개의 변수가 된다.
따라서 함수 내에서의 매개변수 조작은 인수로 전달되는 변수에 아무런 영향을 미치지 않는다. - 참조에 의한 전달 ( call by reference)
참조에 의한 전달 방법은 인수로 전달된 변수의 값을 복사하는 것이 아닌, 원본 데이터를 직접 전달하는 방식
void Local(int&);
int main(void)
{
...
Local(var);
...
}
void Local(int& num)
{
num += 10;
}
Local() 함수의 매개변수 num은 인수로 변수 var의 참조를 전달받는다.
따라서 함수 내에서 참조자 num의 값을 변경하면 원래 인수인 변수 var의 값도 같이 변경된다.
함수 포인터(function pointer)
프로그램에서 정의된 함수는 프로그램이 실행될 때 모두 메인 메모리에 올라간다.
이때 함수의 이름은 메모리에 올라간 함수의 시작 주소를 가리키는 포인터 상수(constant pointer)가 된다.
이렇게 함수의 시작 주소를 가리키는 포인터 상수를 함수 포인터라고 부른다.
함수 원형
void Func(int,int);
함수 포인터 예제
void (*ptr_func)(int,int);