[42Seoul] CPP 02
New rules
클래스의 객체 생성 시에 private 멤버를 자동으로 초기화, 객체 생성시에 딱 한번 호출
Box() { /*perform any required default initialization steps*/}
// All params have default values
Box (int w = 1, int l = 1, int h = 1): m_width(w), m_height(h), m_length(l){}
Copy consstructor (참고, 참고, 참고)
복사 생성자 는 동일한 형식의 개체에서 멤버 값을 복사하여 개체를 초기화
깊은 복사를 위해서는 사용자가 직접 정의를 해야합니다.
복사 생성자는 새롭게 생성되는 객체가 원본 객체와 같으면서도, 완전한 독립성을 가지게 해줍니다.
왜냐하면, 복사 생성자를 이용한 대입은 깊은 복사(deep copy)를 통한 값의 복사여야 하기 때문입니다.
또한, 복사 생성자를 주로 사용하는 이유는
- 객체가 함수에 인수로 전달될 때
- 함수가 객체를 반환값으로 반환할 때
- 새로운 객체를 같은 클래스 타입의 기존 객체와 똑같이 초기화할 때
// Avoid if possible--allows modification of other.
Box(Box& other);
Box(const Box& other);
Box(volatile Box& other);
Box(volatile const Box& other);
// Additional parameters OK if they have default values
Box(Box& other, int i = 42, string label = "Box");
//defining the copy constructor as deleted
Box (const Box& other) = delete;
Copy assignment operator (참고, 참고)
대입 연산자는 자신과 같은 타입의 다른 객체를 대입받을 때 사용하는 연산
복사 생성자와 대입 연산자의 차이 (여기)
Destructor (참고)
소멸자가란 개체가 범위를 벗어나거나 호출에 의해 명시적으로 제거될 때 자동으로 호출 delete되는 멤버 함수
Exercise 00
위에서 new rules 나온 것을 그대로 사용하는 것입니다.
This line may be missing depending on your implementation 이라고 나온 것은 어떻게 복사 연산자를 사용했는지 코드에 따라 나오는 게 달라집니다. 기본 생성자, 복사 생성자, 대입 연산자, 소멸자까지 참고 사이트를 통해서 어떻게 하는 지만 안다면 서브젝트에서 요구한 그대로 만들 수 있습니다.
Exercise 01
반올림하는 함수 roundf (참고)
#include <cmath> // c++ 11
float roundf (float x);
x 값은 가장 가까운 정수로 반올림됩니다(부동 소수점 값으로)
개체 출력자 (참고)
기본 형식의 값을 ostream 형식 개체와 왼쪽 쉬프트(<<) 연산자를 이용하여 스트림에 출력할 때와 같이 사용자가 정의한 형식도 기본 형식처럼 ostream 형식 개체를 이용하여 출력하는 하는 것
부동 소수점 (참고)
고정 소수점과 부동 소수점 비교 (참고)
음수의 표현 (참고) - 현재 대부분의 시스템에서는 모두 2의 보수법으로 음수를 표현
Exercise 02
Increment and Decrement Operator Overloading (참고)
When specifying an overloaded operator for the postfix form of the increment or decrement operator, the additional argument must be of type int; specifying any other type generates an error.
arithmetic operators overloaded(참고, 참고)
comparison overloaded(참고)
위와 같이 overloaded 하고 나면 min, max 의 경우는 쉽게 할 수 있게 된다.
하지만 여기서 나오는 static member function (참고)의 경우 왜? 라는 질문이 나오게 되었고, 찾아보았다.
- static 함수는 static 변수만 사용이 가능하다. (this 포인트 사용 불가)
- 객체를 선언하지 않고 클래스 네임스페이스로 호출이 가능
- 전역 함수(전역 변수 포함)를 사용하기 위한 용도가 대부분
Static member functions are not associated with any object. When called, they have no this pointer.
Static member functions cannot be virtual, const, volatile, or ref-qualified.
The address of a static member function may be stored in a regular pointer to function, but not in a pointer to member function.
static in c++
declarations of namespace members with static storage duration and internal linkage
definitions of block scope variables with static storage duration and initialized once
declarations of class members not bound to specific instances