Part01 C++로의 전환

PassionYim·2023년 11월 20일
0

C++

목록 보기
2/4
post-thumbnail

C언어 입출력과 C++언어 입출력 차이

C에서는 printf(), scanf()를 통해 데이터를 입출력 했다.
C++에서는 cout, cin으로 한다. 아래와 같이.

#include <iostream>
//output
std::cout<<" "<<std::endl;
//input
std::cin>>var;

차이점이라 하면..
1. C언어에서는 자료형에 따라 %d, %c, %f 등 다르게 선언이 필요했다.
2. C++언어에서는 cout, cin으로 자료형에 따라 선언을 달리 해야할 필요가 없어졌다.

함수 오버로딩(Function Overloading)

: 같은 함수명이 여러 개 선언되면서, 매개변수가 다른 경우

Func1처럼 함수명은 같지만, 매개변수가 다를 경우 같은 함수명으로 선언이 가능하다.
단,
1. 매개변수 자료형과 개수가 일치할 경우 선언 불가.
2. 함수의 반환형이 다르고 매개변수가 같은 경우도 불가.

C언어에서는 되지 않았지만, C++에서는 가능하다.

이유는? C언어와 C++언어가 함수를 호출하는 방법이 서로 다르기 때문.
C언어의 경우 => 함수의 이름만 이용해서 호출대상을 찾음.
C++언어의 경우 => 함수이름과 매개변수 선언 두 가지 정보를 이용해서 찾음

함수의 디폴트 값

함수 매개변수에 인자 값을 넣지 않았을 때, 함수 정의시 선언한 Default값으로 정의된다.

Inline함수

매크로와 비슷한 기능

//macro..
#define square(x) ((x)*(x))

Inline의 경우 함수명앞에 inline을 붙여준다.

Inline int square(int x)
{ 
return ((x)*(x));
}

함수 대신 inline함수를 사용하면 전처리기에 의해 처리되지 않고, 컴파일러에 의해서 처리가 된다.

다만, 매크로 함수에는 있지만, 인라인 함수에는 없는 장점이 있다.
매크로의 경우 x의 자료형에 관계가 없다.
Inline은 int나 float의 경우 데이터 손실이 일어난다.

=> templete을 사용하는 방법은 다음에..

Namespace

같은 함수이지만 선언한 사람마다 독립적으로 선언이 가능하도록 돕는 것.

(논리적 그룹의 식별자 컨텍스트)


위와 같이 한 namespace안에 여러개의 namespace도 가능하다.

Reference 참조자

자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름.

=> 기존 변수의 주소에 이름 한 개 더 붙이는것과 같다.

단, 상수 참조 불가. 변수 참조 여러개 가능. 포인터 변수 참조 가능.

Call-by-value vs Call-by-reference

값에 의한 전달, 주소에 의한 전달

=> 매개변수의 형태에 따라 달라지는 것이 아닌, 반환에 대해 달라지는 것.

주소 값을 전달받아서, 함수 외부에 선언된 변수에
접근하는 형태의 함수 호출

주소 값이 매개변수로 전달된 것이 중요한 것이 아니라,
주소 값이 참조의 도구로 사용되었다는 사실이 중요.

Malloc & free => New & delete

변수를 힙 영역에서 생성 및 삭제하는 함수

C언어에서는 Malloc & free을 사용했지만, C++에서는 new & delete를 사용.

** Malloc&free의 불편사항
1. 할당할 대상의 정보를 무조건 바이트 크기단위로 전달해야 한다.
2. 반환형이 void형 포인터이기 때문에 적절한 형 변환을 거쳐야 한다.

C++의 경우 이러한 불편사항이 없어짐.

profile
열정이 전부였던 개발자

0개의 댓글