클래스 생성자와 파괴자
아래와 같은 헤더파일에서,
public 멤버의 함수인 acquire을 사용하지 않고 바로 Stock 클래스를 선언하려면 어떻게 해야할까?
[stock.h]
#ifndef STOCK
#define STOCK
#include <iostream>
using namespace std;
class Stock
{
private: //비공개 멤버,클래스 내에서만 접근 가능
string name;
int shares;
float share_val;
double total_val;
void set_total() { total_val = shares * share_val; }
public: //공개 멤버, 클래스 외부에서도 접근 가능
void acquire(string, int, float);
void buy(int, float);
void sell(int, float);
void update(float);
void show();
};
#endif
public 멤버에 클래스 생성자(+default class)와 클래스 파괴자를 추가하면, acquire 함수를 사용하지 않아도 private 멤버인 name, shares, share_val에 직접 접근하여 값을 초기화할 수 있다.
① 헤더파일의 public 멤버에 클래스 생성자(+default 클래스)와 클래스 파괴자 원형 제공
#ifndef STOCK
#define STOCK
#include <iostream>
using namespace std;
class Stock
{
private:
string name;
int shares;
float share_val;
double total_val;
void set_total() { total_val = shares * share_val; }
public:
//void acquire(string, int, float);
void buy(int, float);
void sell(int, float);
void update(float);
void show();
Stock(string, int, float); //클래스 생성자
Stock(); //default 클래스
~Stock(); //클래스 파괴자
};
#endif
※ ~ (틸태) : 클래스의 이름 앞에 붙으며, 클래스 파괴자를 의미한다
※ default 클래스 : Class의 멤버가 초기화되지 않았을 때, 기본 default 값으로 초기화될 클래스
② func.cpp 파일에 클래스 생성자(+default 클래스)와 클래스 파괴자 정의하기
Stock::Stock(string co, int n, float pr) //클래스 생성자
{
name = co;
shares = n;
share_val = pr;
set_total();
}
Stock::Stock() //default 클래스
{
name = "";
shares = 0;
share_val = 0;
set_total();
}
Stock::~Stock() //클래스 파괴자
{
cout << name << "클래스가 소멸되었습니다.\n";
cout << endl;
}
③ 클래스 생성자(+ default 클래스)와 클래스 파괴자 사용예시
#include <iostream>
#include "stock.h"
int main()
{
cout << "생성자를 이용해 객체 생성\n";
Stock temp("ITLover", 100, 1000);
cout << "default 생성자를 이용하여 객체 생성\n";
Stock temp2;
cout << "temp를 temp2에 대입\n";
temp2 = temp;
cout << "temp와 temp2 출력\n";
temp.show();
temp2.show();
/*
회사명: ITLover
주식 수: 100
주가: 1000
주식 총 가치: 100000
회사명: ITLover
주식 수: 100
주가: 1000
주식 총 가치: 100000
*/
cout << "생성자를 이용하여 temp 내용 재설정\n";
temp = Stock("ArchLover", 200, 1000);
//ArchLover클래스가 소멸되었습니다
//생성한 클래스를 클래스 파괴자 ~Stock()을 통해 소멸시킴
cout << "재설정된 temp와 temp2 출력\n";
temp.show();
temp2.show();
/*
회사명: ArchLover
주식 수: 200
주가: 1000
주식 총 가치: 200000
회사명: ITLover
주식 수: 100
주가: 1000
주식 총 가치: 100000
*/
//ITLover클래스가 소멸되었습니다
//ArchLover클래스가 소멸되었습니다
return 0;
}
※ 클래스 생성자(+default 클래스)와 클래스 파괴자
① 클래스 생성자를 통해, Stock temp(string, int, float) 형식으로 바로 정의하는 것이 가능하다
② 클래스 파괴자는 클래스의 멤버 값을 초기화하는 것과 동시에 작동한다
③ 클래스 파괴자는 코드가 끝날 때, 클래스 멤버가 초기화된 순서대로 파괴시킨다
Class A;
Class B;
//Class A 파괴
//Class B 파괴
※ 해당 게시글은 개인 학습의 목적으로, 아래 강의를 수강한 후 정리한 학습노트입니다.
'C++ 프로그래밍 > 기초 문법' 카테고리의 다른 글
[C++ 기초 문법] 연산자 오버로딩 (0) | 2024.02.13 |
---|---|
[C++ 기초 문법] 클래스 Array와 *this (0) | 2024.02.12 |
[C++ 기초 문법] 추상화와 클래스 (0) | 2024.02.11 |
[C++ 기초 문법] 분할 컴파일 (0) | 2024.02.11 |
[C++ 기초 문법] 함수의 템플릿(template) (0) | 2024.02.11 |