- 모든 멤버 데이터가 public 영역에 있다면, 객체 생성시 { } 로 초기화 가능
- 멤버 데이터가 하나라도 private에 있다면, 구조체 초기화 문법 사용할 수 없음 → 초기화 멤버 함수를 제공해야 함. 하지만, 초기화 할때마다 초기화 함수를 호출하는 것은 매우 번거로운 일. 그래서 등장한 것이 생성자
class Person{
private :
std::string name;
int age;
public:
void init(){
name = "Lee";
age = 29;
}
Person(){
name = "Lee";
age = 29;
}
}
- 생성자 :
클래스이름()
. 객체를 생성할 때 자동으로 호출
- 소멸자 :
~클래스이름()
. 객체가 파괴될 때 자동으로 호출
- 생성자 특징
- 반환 값을 표기하지 않고 값을 반환할 수 없음. 인자가 없어도 되고 있어도 됨.
- 생성자가 있어야 객체를 생성할 수 있다.
- 사용자가 생성자를 한 개도 만들지 않으면 컴파일러가 디폴트 생성자 제공
Class Point{
int x,y;
Point(){x=0;y=0;}
Point(int a, int b){x=a;y=b;}
}
int main(){
Point p;
Point p2(1,2)
Point p3{1,2}
Point p4 ={1,2}
Point arr1[3];
Point arr2[6] ={{1,2},{3,4}};
Point *p;
p = static_cast<Point*>(malloc(sizeof(Point)));
free(p);
p_new1 = new Point;
delete p_new1;
p_new2 = new Point(1,2);
delete p;
}
- 객체 생성시 멤버 데이터가 class로 생성자가 있다면,
→ 멤버의 생성자가 먼저 실행되고,
→ 객체 자신의 생성자가 호출된다.