# C언어의 복습
◎ const int num = 10; // 변수 num의 상수화
◎ const int * ptr1 = &val1; // ptr1을 통해 val1의 값을 변경할 수 없음
◎ int * const ptr2 = &val2; // ptr2의 대상 변경이 불가능, ptr2의 상수화
◎ const int * const ptr3 = &val3; // ptr3의 상수화 및 ptr2을 이용해서 val3의 값을 변경할 수 없음
# 자료형 bool
- 기본자료형의 일종
- 참을 의미하는 true, 거짓을 의미하는 false중 하나의 값을 가진다.
- 1과 0이 아니라 논리적인 참과 거짓을 의미하는 키워드라고 생각하자.
#include <iostream>
usingnamespacestd;
bool IsPositive(int num)
{
if(num<0)
return false;
else
return true;
}
int main(void)
{
bool isPos;
int num;
cout<<"Input number: ";
cin>>num;
isPos=IsPositive(num);
if(isPos)
cout<<"Positive number"<<endl;
else
cout<<"Negative number"<<endl;
return0;
}
# 참조자(Reference)의 이해- 이름을 지니는 대상에 별명을 붙여주는 행위
int val=10;
int &ref=val;
val → 10, ref → 10
- 참조자와 변수는 생성되는 방법에 있어서만 차이를 보이고 만들어지고 나면 완전히 같다.
- 이름이 존재하지 않는 대상을 참조할 수 없다.
- 선언과 동시에 초기화 되어야 한다.
- 참조자는 상수를 참조할 수 없지만 상수화된 참조자의 경우는 가능하다.
#include <iostream>
usingnamespacestd;
void SwapByRef2(int &ref1, int& ref2)
{
int temp=ref1;
ref1=ref2;
ref2=temp;
}
int main(void)
{
int val1=10;
int val2=20;
SwapByRef2(val1, val2);
cout<<"val1: "<<val1<<endl;
cout<<"val2: "<<val2<<endl;
return0;
}
※ C++에서는 주소값을 이용할 수도 있지만 위와 같이 참조자를 통해 Call-by-reference를 구현 할 수 있다.# new & delete- C언어의 malloc & free와 유사하지만 클래스 관점에서 큰 차이가 있다.
- 적절한 형변환이 필요없고 바이트 크기 단위로 전달할 필요가 없다.
#include <iostream>
#include <string.h>
usingnamespacestd;
char * MakeStrAdr(int len)
{
// char * str=(char*)malloc(sizeof(char)*len);
char * str=newchar[len];
return str;
}
int main(void)
{
char * str=MakeStrAdr(20);
strcpy(str, "I am so happy~");
cout<<str<<endl;
// free(str);
delete []str;
return0;
}
# C++에서 C언어의 표준함수 호출하기- c를 더하고 .h를 빼라.
#include <stdio.h> → #include <cstdio>
#include <stdlib.h> → #include <cstdlib>
#include <math.h> → #include <cmath>
#include <string.h> → #include <cstring>
※ 헤더파일의 확장자인 .h를 생략하고 앞에 c를 붙이면 C언에 대응하는 C++의 헤더파일 이름이 된다.
※ 하위 버전과의 호환성을 제공하기 위해 함수 호출을 허용하지만 가급적 C++의 표준헤더를 이용하는 것이 좋다.