https://modoocode.com/197
주제:
- 생성자 초기화 리스트(initializer list)
- 클래스의 const, static 변수
- 레퍼런스 타입을 리턴하는 함수
- this 포인터
- const 멤버 함수
initializer list
- [정의] 초기화 리스트(initializer list) 는 생성자 호출과 동시에 멤버 변수들을 초기화
(생성자 이름) : var1(arg1), var2(arg2) {}
- [사용이유] 생성자 초기화 리스트는 생성과 초기화를 동시해 하게 된다. (1)상수나 (2)레퍼런스 들은 모두 생성과 동시에 초기화가 필요하므로 이때는 반드시 초기화리스트로. => 호출하고 대입하는것과 비교하면 좀 더 효율적임
static
- [정의] static 은 클래스에서 전역 변수처럼 쓰이는것으로 객체가 늘어나도 똑같은 변수를 사용한다.
static int total_marine_num;
- [특성] static 을 초기화해줄때는 보통 클래스 밖에서 초기화를 시켜준다 .
- [특성] 어떤 클래스의 static 멤버 변수의 경우, 멤버 변수들 처럼, 객체가 소멸될 때 소멸되는 것이 아닌, 프로그램이 종료될 때 소멸
-
class Marine { static int total_marine_num; int hp; // 마린 체력 int coord_x, coord_y; // 마린 위치 bool is_dead; const int default_damage; // 기본 공격력 public: Marine(); // 기본 생성자 Marine(int x, int y); // x, y 좌표에 마린 생성 Marine(int x, int y, int default_damage); int attack(); // 데미지를 리턴한다. void be_attacked(int damage_earn); // 입는 데미지 void move(int x, int y); // 새로운 위치 void show_status(); // 상태를 보여준다. ~Marine() { total_marine_num--; } }; int Marine::total_marine_num = 0;
-
- [특성]static은 변수뿐만 함수로도 쓰일수있다. 클래스 전체에서 딱 1개 존재하는 함수. 어떤 객체에 종속되는 것이 아니라 클래스에 종속되는 것으로, 따라서 이를 호출하는 방법도 (객체).(멤버 함수) 가 아니라,와 같이 (클래스)::(static 함수) 형식으로 호출
- Marine::show_total_marine();
this
- [정의] this 객체 자신을 가리키는 포인터의 역할을 합니다. 즉, 이 멤버 함수를 호출하는 객체 자신을 가리킴.
- 모든 멤버 함수 내에서는 this 키워드가 정의되어 있으며 클래스 안에서 정의된 함수 중에서 this 키워드가 없는 함수는 (당연하게도) static 함수 뿐
Marine& Marine::be_attacked(int damage_earn) {
this->hp -= damage_earn;
if (this->hp <= 0) this->is_dead = true;
return *this;
}
- be_attacked 함수는 Marine& 타입을 리턴하게 되는데, 위 경우, *this 를 리턴. *this 는 그 객체 자신을 의미
const 함수
- [정의]C++ 에서는 변수들의 값을 바꾸지 않고 읽기 만 하는, 마치 상수 같은 멤버 함수를 상수 함수 로써 선언할 수 있음
int attack() const; // 데미지를 리턴한다.
- 일단 상수 함수는 위와 같은 형태로 선언
(기존의 함수의 정의) const;
- 그리고 함수의 정의 역시 const 키워드를 꼭 넣어주어야 함
int Marine::attack() const { return default_damage; }
- 상수 함수로 이 함수를 정의함으로써, 이 함수는 다른 변수의 값을 바꾸지 않는 함수**라고 다른 프로그래머에게 명시 시킬 수 있음. 상수 함수 내에서는 객체들의 '읽기' 만이 수행되며, 상수 함수 내에서 호출 할 수 있는 함수로는 다른 상수 함수 밖에 없음. => 보통 getvalue() 함수들처럼 값을 읽기만할때만 사용
class MyClass {
public:
int getValue() const; // 객체를 수정하지 않고 값을 읽음
void setValue(int value); // 객체의 값을 수정함
private:
int value_;
};
완벽히 소화시키기 어렵지만 꾸준히 익숙해지기
'Language > C++' 카테고리의 다른 글
[c++][씹어먹는 c++] 5 - 1. 연산자 오버로딩 (0) | 2024.04.25 |
---|---|
[c++][씹어먹는 C ++ ]4.6 클래스의 explicit 과 mutable (0) | 2024.04.22 |
[c++][씹어먹는 c++] 4.3 스타만들기(복사 생성자, 소멸자) (1) | 2023.10.17 |
[c++][씹어먹는 c++] 4.2 클래스의 세계 (0) | 2023.10.16 |
[c++][씹어먹는 c++] 4.1 이 세상은 객체 (1) | 2023.10.16 |
댓글