기록장

20210316 c++ 문법 정리

nolzaheo 2021. 3. 16. 14:49
728x90

 

<C++에서 새로 나온 개념>

- bool형, string형

- 함수 오버로딩, default 값, inline 함수

- 연산자 오버로딩

- namespace

- 참조자(reference)

- new, delete 연산자

- generic

 

bool

0을 거짓, 그 외의 수를 참으로 흔히 사용하다가 c++에서 이를 아예 bool 값으로 정의해버렸다.

true: 참을 의미하는 1바이트 크기의 데이터

false: 거짓을 의미하는 1바이트 크기의 데이터

 

즉 true, false는 정수 1,0과는 다르다. 하지만 정수가 와야 할 위치에 오면 각각 1과 0으로 변환된다.

ex) int num=true+false; //num=1+0;

 

string

문자를 배열 형태로 처리하는 , 즉 문자열을 처리하는 클래스이다.

다양한 상황에 맞게 사용할 수 있는 연산자와 멤버 함수가 있다.

 

문자열 길이 / .size(), .length()

문자열 결합 / .append(), .insert() 혹은 +,+= 연산자

문자열 비교 / .compare() 혹은 ==, !=, >, >=, <, <= 연산자

 

이 외의 다양한 기능들은 아래에 잘 나와있다.

www.cplusplus.com/reference/string/ 혹은 blockdmask.tistory.com/338

 

C++의 string은 C언어의 char*, char[] 문자열과 달리 문자열끝에 '\0'이 붙지 않으므로 주의해야한다.

 

함수 오버로딩

매개변수의 선언이 다를 경우 동일한 이름의 함수를 오버로딩하여 정의할 수 있다. 반환값의 형은 오버로딩에서 고려되지 않는다. 즉, 매개변수는 갖고 반환형만 다른 경우에는 함수 오버로딩 조건이 성립되지 않는다.

 

ex)

가능 - 매개변수의 자료형이 다르므로

int MyFunc(char c) { }

int MyFunc(int n) { }

 

가능 - 매개변수의 수가 다르므로

int MyFunc(int n) { }

int MyFunc(int n1, int n2) { }

 

불가능 - 매개변수가 같으므로

void MyFunc(int n) { }

int MyFunc(int n) { }

 

즉, 매개변수가 달라야한다.

 

연산자 오버로딩

연산자 대상이 무엇이냐에 따라 기존 연산자의 의미를 새롭게 정의할 수 있다.

string 클래스의 +,+= 연산자도 연산자 오버로딩의 한 예이다.

 

namespace

서로 같은 이름의 함수,변수를 구별하기 위해 namespace를 만들어 이 namespace를 함수 또는 변수 앞에 적어줌으로써

구별한다. 즉 함수 이름이 같아도 namespace로 구별가능하다.

 

ex)

namespace A{

  void C() {} //A::C()

}

 

namespace B{

  void C() {} //B::C()

}

 

using을 사용하여 미리 namespace를 명시해줄 수 있다.

각각 따로 using을 붙여 명시해주거나, 'using namespace ○○'을 사용하여 전체를 통틀어 명시해준다.

참조자

변수의 별명이다.

포인터 대신 사용함으로써 코드를 간략하게하고, 보안성을 높일 수 있다.

생성 즉시 초기화해야하며, nULL 혹은 상수로 초기화 할 수 없다.

 

ex)

int &num1=num2; //num2가 num1의 별명이 된다.

이 이후부터는 num1로 하는 모든 연산이 num2로 하는 것과 동일한 결과를 보인다.

 

포인터에 대한 참조도 가능하다.

 

ex)

int *(&pref)=ptr; //포인터에 대한 참조

int **(&dpref)=dptr; //이중 포인터에 대한 참조

 

new, delete 연산자

c에서 malloc, free가 있다면 c++에는 new, delete가 있다.

동적으로 메모리를 할당한다.

c의 malloc, free와 같은 역할을 하지만 c++의 new,delete는 프로그램이 죽었을 때 exception을 받아 문제가 무엇인지 확인할 수 있다는 점에서 차이가 있다.

 

generic

클래스의 정의를 자료형에 상관없이 일반화하여 재사용할 수 있다.

728x90