C++ 프로그래밍/기초 문법

[C++ 기초 문법] 클래스 생성자와 파괴자

SW Developer 2024. 2. 12. 00:00

클래스 생성자와 파괴자

 

아래와 같은 헤더파일에서,

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 파괴

 

 

 

 

 

※ 해당 게시글은 개인 학습의 목적으로, 아래 강의를 수강한 후 정리한 학습노트입니다.

https://inf.run/pypW