C, C++
[C++] 생성자(Constructor)의 개념, 생성자 정의하고 호출하는 다양한 방법들, 생성자 오버로딩, 기본 생성자
깃짱
2024. 4. 24. 20:30
반응형
반응형
💋 생성자란?
✔️ 개념
- 객체를 초기화하는 역할을 하는 member function
- 초기화 = member variables의 값을 초기화
- 객체 선언 시 자동으로 호출된다.
💋 생성자 코드에서 사용하기
✔️ 생성자 정의
- 이름은 클래스 이름과 동일하게
- 반환값은 없음
class Money {
public:
Money(int dollar, int cent) // 생성자
: dollar(dollar), cent(cent) {
}
int getDollars() const {
return dollar;
}
int getCents() const {
return cent;
}
private:
int dollar;
int cent;
};
✔️ 생성자 호출
int main() {
Money money1(4, 2), money2(5, 2);
}
- 생성자 자동으로 호출되며 객체가 생성된다.
✔️ 생성자 정의 방법들
1. 클래스 내에서 직접 정의하기
class Money {
public:
Money(int dollar, int cent){
this->dollar = dollar;
this->cent = cent;
};
int getDollars() const {
return dollar;
}
int getCents() const {
return cent;
}
private:
int dollar;
int cent;
};
2. class 먼저 정의하고 밖에서 정의하기
class Money {
public:
Money(int dollar, int cent);
int getDollars() const {
return dollar;
}
int getCents() const {
return cent;
}
private:
int dollar;
int cent;
};
Money::Money(int dollar, int cent) {
this->dollar = dollar;
this->cent = cent;
}
3. Initialization Section에서 정의하기
class Money {
public:
Money(int dollar, int cent);
int getDollars() const {
return dollar;
}
int getCents() const {
return cent;
}
private:
int dollar;
int cent;
};
Money::Money(int dollar, int cent)
: dollar(dollar), cent(cent) {
}
- {} 이전에 : 와 함께 정의하면 member 변수에 직접 접근할 수 있어서 좀더 깔쌈하게 정의할 수 있음.
💋 생성자 제대로 사용하기
✔️ 생성자 Overloading
overloading
- 같은 이름의 메서드를 클래스 내에서 여러 번 정의하지만, 매개변수의 타입이나 개수가 다른 경우
- 메서드 이름만 같고, 매개변수의 리스트가 다르기 때문에 완전히 다른 메서드임!
class DayOfYear {
public:
DayOfYear(int month, int day);
DayOfYear(int month); // 생성자 오버로딩
DayOfYear(); // 생성자 오버로딩
void input();
void output() {
cout << month << "월 " << day << "일" << endl;
};
int getMonth();
int getDay();
private:
int month;
int day;
void validateDate();
};
int main() {
DayOfYear date1(4, 16), date2(8, 10), date3(3, 1), date4; // 다양하게 호출 가능
}
✔️ Explicit Constructor Call
int main() {
DayOfYear date1(4, 16);
date1 = DayOfYear(5, 5);
}
- 이렇게 하면 앞서 선언한 4월 16일이 5월 5일로 뒤집어씌워진다.
✔️ 기본 생성자
- parameter가 하나도 없는 생성자
- 생성자가 하나도 없으면 컴파일러가 자동으로 생성해주지만, 개발자가 다른 생성자를 정의했다면 자동으로 생성해주지 못하므로 필요하다면 개발자가 직접 작성해 주어야 한다.
int main() {
DayOfYear date; // 기본 생성자 호출 (없으면 호출 안됨)
}
도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!
반응형