열렬히.뛰기

Cpp module 02

école 42 > Cpp part.1 > 42 : Cpp 모듈 > Cpp module 02

orthodox canonical form

  • cpp : 기초의 Orthodox Canonical form 참고

ex00

  • 코드는 그닥 어렵지 않다.
  • 왜 복사생성자와 할당 연산자 오버로딩을 하는지 잘 생각해보자.

부동소수점과 고정소수점

python
# 소수 만들기 - 고정소수점

(부호) (정수부) (소수부)

21.25 => 10101.01

부호비트 : 0 [음수 : 1 / 양수 : 0]
정수부 : 10101 
소수부 : 01
python
# 소수 만들기 - 부동소수점

(부호) (지수부) (가수부)

21.25 = 10101.01 (2) = 1.010101 * 2^4

부호비트 : 0 [음수 : 1 / 양수 : 0]
지수부분 : 10000011 = 127 + 4
가수부분 : 010101

ex01

<< 오버로딩은 왜 전역으로 만들어야 하는가?

  • 반환값이 std::ostream 인 경우, 내가 만든 클래스가 아니므로 클래스 안에 넣을 수 없음.

고정 소수점 적용

cpp
value : 소수점 값을 저장할 것.
bits : 고정소수점 값.

// int : 받아드린 number를 8만큼 비트 이동
// 정수만 있기 때문에 가능
bits = int_number << 8;

// float : 받아드린 number에 256 [= (1 << 8)]를 곱한다.
// 이 경우 소수가 
bits = float_number * (1 << 8);

// 다시 float로 돌리려면
newfloat = (float)this->value / (1 << this->bits);
// 다시 int로 돌리려면
newint = (this->value) >> (this->bits);

ex02

python
static 정적 멤버 함수:
- private한 static 멤버변수에 접근하는 용도
- 객체를 생성하지 않고도, 클래스 이름만으로도 호출. (★)
	- 비교하는 일이 빈번해서 만든 것?
python
후위 연산자 오버로딩할 때 const 붙이기
- (a++)++ 라는 연산이 존재하면, 이를 계산할 것인가?
- a가 int 계열이면, 정의되지 않음.
- 따라서 해당 부분은 정의하지 않게 막았음.

ex03

python
선분 위에 있어도 triangle 안에 있다고 판단해야 함.