문자형 char
컴퓨터 내부에선 모두 숫자(ASCII CODE)로 표현된다.

32~127번까지는 화면에 출력가능한 숫자가 나온다.

한글자는 'a'('')로 표현 문자열은 "Hello, Wolrd"("") 로 표현한다.

cin으로 여러개의 문자를 입력받으면 첫글자를 저장하고 나머지 문자는 버퍼(임시저장소)에 저장한다.

\n(줄바꿈),\t(줄간격맞추기)등 \로 시작하는 문자는 여러 기능을 수행한다.
",'등을 출력하고 싶으면 \를 사용한다. ex)\'안녕\'
\n은 가시적으로 두글자로 보이지만 한글자로 적용된다.

\n과 endl의 차이점
\n이 있으면 버퍼에 저장된다.
endl이 있으면 무조건 출력한다(버퍼에 있는걸 모두 출력한다).

#include  <iostream>

int main() 
{ 
using namespace std; 

//둘다 A가 출력된다. 
char c1(65); 
char c2('A'); 

//윈도우용 프로그램에서 사용 
wchar_t c; 
//이모티콘등 unicode를 사용가능하다. 
char32_t c3; 

cout << c1 << " " << c2 << endl; 

//캐스팅 
//C style 
cout << (char)65 << endl; 
cout << (int)'A' << endl; 

//C++ style 
cout << char(65) << endl; 
cout << int('A') << endl; 

//위에 캐스팅은 강제로 변환하는 개념이다. 
//아래 방법은 기본타입을 변환할때 컴파일러에게 확인후 변환한다. 
cout << static_cast(65) << endl; 
cout << static_cast('A') << endl; 

char ch(97); 
cout << ch << endl; 
cout << static_cast(ch) << endl; 
cout << ch << endl; 

//버퍼 테스트 abc 입력하면 바로 출력된다. 
cin >> c1; 
cout << c1 << " " << static_cast(c1) << endl; 
cin >> c1; 
cout << c1 << " " << static_cast(c1) << endl;  
cin >> c1; 
cout << c1 << " " << static_cast(c1) << endl; 


//범위 체크 
cout << sizeof(char) << endl; 
cout << (int)std::numeric_limits::max() << endl; 
cout << (int)std::numeric_limits::lowest() << endl; 

cout << sizeof(unsigned char) << endl; 
cout << (int)std::numeric_limits::max() << endl; 
cout << (int)std::numeric_limits::lowest() << endl; 

cout << '\a' << endl; 

return 0; 
}

리터럴 literal 

상수란? 변하지 않는 것
3.14

const를 사용하면 변수의 값을 변경할 수 없다.

 

#include <iostream>

int main()
{
	using namespace std;
	//상수 변하지 않는것.
	3.14;

	//pi는 메모리에 공간을 차지하고 있다.
	//pi는 변수이다.
	float pi = 3.14f;

	//signed unsigned로 변경
	//int i = -12345u;
	//위 아래 같다.
	//i = (unsigned)-12345;

	//const 값을 변경할 수 없다.
	const float pi2 = 3.14;
	
	//Decimal 10진수
	// 0 1 2 3 4 5 6 7 8 9
	//Octal 8진수
	// 0 1 2 3 4 5 6 7 10 11 12 13
	//Hexa 16진수
	// 0 2 3 4 5 6 7 8 9 A B C D E F

	//0이붙으면 8진수로 인식한다.
	int x = 012;
	cout << x << endl;

	//0x가 붙으면 16진수로 인식한다.
	x = 0xF;
	cout << x << endl;

	//0b가 붙으면 2진수로 인식한다.
	x = 0b0111;
	cout << x << endl;

	//리터럴 상수
	//10은 갯수이다.
	int price = x * 10;

	//매직넘버(상수)를 입력하는 것보단 만들어 사용한다.
	//주석 대신 사용한다.
	const int price_num = 10;
	price = x * price_num;

	return 0;

}

심볼릭 symbolic

 

#define PRICE 30;
기존 c사용자는 매크로를 사용했다.

 

매크로의 단점
맨위에 설정해놓기에 디버깅이 힘들다.
매크로의 적용범위가 쓸모없이 너무 넓어진다.

 

매크로 대신 const를 사용한다.

적용범위 안에서 표현해서 사용하는것이 좋다. 
const int price = 30;

심볼릭 상수란?
const 를 헤더파일로 만들어 모아놓으면 사용하기 좋다.
헤더파일로 만들어 놓으면 재사용이 용이하다.
또 한곳에 모여있으면 코드 변경이 쉽고 영향력이 넓어진다.

main.cpp

#include  <iostream>
#include "MY_CONSTANTS.h" 

using namespace std; 

//파라미터를 변경하지 못하게 const로 생성한다. 
void printNumber(const int num) 
{ 
//이함수 안의 영역에 num 생성되고 
//호출될때 인자 4가 입력된다. 

//값을 변경할 시 변수를 생성한다. 
int n = num; 
n = 456; 
cout << num << endl; 
} 

int main() 
{ 
//값을 변경할 수 없다. 
//컴파일러가 변경을 막아준다. 
const double gravity{ 9.8 }; 
//const위치는 상관없으나 보통 앞에 붙인다. 
double const gravity2{ 9.8 }; 

//아래 코드는 에러가 난다. 
//gravity = 3.2; 

printNumber(4); 

//컴파일할 때 생성되기에 컴퓨터가 알 수 있다. 
const int my_const(123); 
//constexpr은 컴파일할때 생성되는 함수를 표현할 때 사용한다. 
constexpr int my_const2(123); 
int number; 
cin >> number; 

//아래 const는 실행을 해봐야 알 수 있다. 
const int special_num(number); 
//constexpr을 사용하면 에러가 난다. 
//constexpr int special_num2(num); 

//기존 c사용자는 매크로를 사용했다. 
//맨위에 설정해놓기에 디버깅이 힘들다. 
//매크로의 적용범위가 너무 넓어진다. 
#define PRICE 30; 
//아래로 사용하는 것이 좋다. 
const int price = 30; 

//헤더파일로 const를 뺴놓는다 
double d1 = constants::pi; 

return 0; 
} 


MY_CONSTANTS.h

#pragma once 

namespace constants 
{ 
constexpr double pi(3.141592); 
constexpr double avogadro(6.02214); 
}

'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글

c++ 비트단위연산자,비트플래그란?  (0) 2019.07.04
c++ 연산자종류  (0) 2019.07.03
c++ 정수형,부동소수점수란?  (0) 2019.06.28
c++ namespace란?  (0) 2019.06.26
c++ 헤더파일 만드는 이유  (0) 2019.06.26

+ Recent posts