Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- const
- Deep Learning
- pass by reference
- 알고리즘
- 파이썬
- 티스토리챌린지
- predictive analysis
- string
- Python
- Data Science
- 오블완
- 백준
- OOP
- C++
- Class
- 배열
- 함수
- 문자열
- vscode
- raw data
- 반복문
- 포인터
- Object Oriented Programming
- array
- Pre-processing
- programming
- pointer
- function
- assignment operator
- baekjoon
Archives
- Today
- Total
Channi Studies
[C++] 생성자 초기화 리스트 (Constructor Initialization List), 생성자 오버로딩 본문
C++/객체지향 프로그래밍 (OOP)
[C++] 생성자 초기화 리스트 (Constructor Initialization List), 생성자 오버로딩
Chan Lee 2023. 12. 28. 17:11C++에서 객체를 생성할 때,
대입 연산자를 사용하지 않고 리스트의 형식으로 초기화 하는 방법이 존재합니다.
이를 우리는 생성자 초기화 리스트 라고 부릅니다
예시를 보여드리겠습니다.
class Player {
private:
string name{};
int health{};
int xp{};
public:
// Constructor
Player(string name_val, int health_val, int xp_val);
};
Player::Player(string name_val, int health_val, int xp_val)
: name{name_val}, health{health_val}, xp{xp_val} {}
하지만 입력하는 사람이 모든 값을 입력하지 않을 수 있기 때문에 우리는 오버로딩을 합니다.
함수의 오버로딩과 동일한 개념입니다.
Player();
Player(string name_val);
Player(string name_val, int health_val);
Player(string name_val, int health_val, int xp_val);
Player::Player() : name{"None"}, health{0}, xp{0} {}
Player::Player(string name_val) : name{name_val}, health{0}, xp{0} {}
Player::Player(string name_val, int health_val)
: name{name_val}, health{health_val}, xp{0} {}
Player::Player(string name_val, int health_val, int xp_val)
: name{name_val}, health{health_val}, xp{xp_val} {}
하지만 동일한 코드를 자꾸 반복해서 입력하게 되죠?
이를 해결한 방법은 다음과 같습니다.
가장 큰 범위의 생성자를 먼저 지정하고, 이에 대입하는 방법입니다.
Player(string name_val, int health_val, int xp_val);
Player();
Player(string name_val);
Player(string name_val, int health_val);
Player::Player(string name_val, int health_val, int xp_val)
: name{name_val}, health{health_val}, xp{xp_val} {}
Player::Player() : Player("None", 0, 0) {}
Player::Player(string name_val) : Player(name_val, 0, 0) {}
Player::Player(string name_val, int health_val): Player(name_val, health_val, 0) {}
'C++ > 객체지향 프로그래밍 (OOP)' 카테고리의 다른 글
[C++] 클래스 멤버 접근 제한자 | Class Member Access Modifiers (1) | 2023.12.29 |
---|---|
[C++] 함수 혹은 메소드에서 객체의 불필요한 복사를 방지하기 (0) | 2023.12.29 |
[C++] 헤더가드 (header guards) | #pragma once, #ifndef (2) | 2023.12.28 |
[C++] 클래스 멤버 접근하기 (Accessing Class Members) (0) | 2023.12.26 |
[C++] 클래스와 객체 (0) | 2023.12.26 |