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으로 자료형에 따라 선언을 달리 해야할 필요가 없어졌다.
Func1처럼 함수명은 같지만, 매개변수가 다를 경우 같은 함수명으로 선언이 가능하다.
단,
1. 매개변수 자료형과 개수가 일치할 경우 선언 불가.
2. 함수의 반환형이 다르고 매개변수가 같은 경우도 불가.
이유는? C언어와 C++언어가 함수를 호출하는 방법이 서로 다르기 때문.
C언어의 경우 => 함수의 이름만 이용해서 호출대상을 찾음.
C++언어의 경우 => 함수이름과 매개변수 선언 두 가지 정보를 이용해서 찾음
함수 매개변수에 인자 값을 넣지 않았을 때, 함수 정의시 선언한 Default값으로 정의된다.
매크로와 비슷한 기능
//macro..
#define square(x) ((x)*(x))
Inline의 경우 함수명앞에 inline을 붙여준다.
Inline int square(int x)
{
return ((x)*(x));
}
함수 대신 inline함수를 사용하면 전처리기에 의해 처리되지 않고, 컴파일러에 의해서 처리가 된다.
다만, 매크로 함수에는 있지만, 인라인 함수에는 없는 장점이 있다.
매크로의 경우 x의 자료형에 관계가 없다.
Inline은 int나 float의 경우 데이터 손실이 일어난다.
=> templete을 사용하는 방법은 다음에..
위와 같이 한 namespace안에 여러개의 namespace도 가능하다.
단, 상수 참조 불가. 변수 참조 여러개 가능. 포인터 변수 참조 가능.
주소 값을 전달받아서, 함수 외부에 선언된 변수에
접근하는 형태의 함수 호출
주소 값이 매개변수로 전달된 것이 중요한 것이 아니라,
주소 값이 참조의 도구로 사용되었다는 사실이 중요.
C언어에서는 Malloc & free을 사용했지만, C++에서는 new & delete를 사용.
** Malloc&free의 불편사항
1. 할당할 대상의 정보를 무조건 바이트 크기단위로 전달해야 한다.
2. 반환형이 void형 포인터이기 때문에 적절한 형 변환을 거쳐야 한다.
C++의 경우 이러한 불편사항이 없어짐.