C++
C++ 생성자와 소멸자
윤주승
2025. 3. 29. 17:14
Stock::Stock() {
}
Stock::~Stock() {
}
먼저, :: 는 스코프 연산자로, 클래스의 멤버 함수를 클래스 외부에서 정의할 때 사용한다.
생성자는 기본 생성자와 매개변수가 여러 개 있는 오버로딩된 생성자가 있다.
Stock temp;
temp.acquire("Samsung", 50, 500);
기존에는 이렇게 객체를 생성한 뒤, 객체를 통해 함수를 호출해서 값을 변경할 수 있었다.
그러나 생성자를 사용하면 객체를 생성함과 동시에 값을 변경할 수 있다.
public:
void acquire(string, int, float);
void buy(int, float);
void sell(int, float);
void update(float);
void show();
Stock(string, int, float);
~Stock();
};
Stock::Stock(string co, int n, float pr) {
name = co;
shares = n;
share_val = pr;
set_total();
}
매개변수가 있는 생성자를 선언하고, 정의하면 메인 함수에서 다음과 같이 값을 바로 대입할 수 있다.
Stock temp = Stock("Kakao", 100, 1000);
temp라는 이름으로 객체를 만들면서 "Kakao", 100, 1000은 co, n, pr에 들어가고, 이 값은 name, shares,
share_val에 들어가서 멤버변수에 저장된다.
소멸자
클래스 앞에 ~가 붙은것을 소멸자라 한다. 소멸자는 매개변수를 가질수 없다.
사용자는 명시적으로 소멸자를 호출할 수 없다.
#include <iostream>
#include "Stock.h"
int main() {
cout << "생성자를 이용하여 객체 생성\n";
Stock temp = Stock("Kakao", 100, 1000);
cout << "디폴트 생성자를 이용하여 객체 생성\n";
Stock temp2;
cout << "temp를 temp2에 대입" << endl;
temp2 = temp;
cout << "temp와 temp2 출력" << endl;
temp.show();
temp2.show();
cout << "생성자를 이용하여 temp 내용 재설정\n";
temp = Stock("Naver", 200, 2000);
cout << "재설정된 temp 출력\n";
temp.show();
return 0;
}
먼저 하나는 매개변수가 있는 temp라는 객체를 생성하며 값을 대입해주었고
하나는 매개변수가 없는 디폴트 생성자를 이용하였다. (temp2)
실행결과를 보면 temp의 값은 temp2에 모두 대입이 되었고
Naver클래스가 소멸되었습니다. 라는 문장이 출력되었다.
이는 객체안의 값을 변경할때 컴파일러가 자동으로 소멸시켰다는 것이다.