class의 생성자와 소멸자

Icarus<Wing>·2022년 9월 18일
0
post-thumbnail
  1. 생성자:public에 선언해야 main함수에서 사용가능
  • 함수의 원형:classname(param1,param2...)로 선언

  • 함수의 정의:classname :: classname(param1,param2){}로 정의

  • 함수의 호출:classname temp(arg1,arg2...);로 객체 생성
    또는 classname temp = classname(arg1,arg2...)로 생성가능

    ---

    stock.h(선언부분)

    #include <iostream>
    
    using namespace std;
    //주식 프래그램을 class를 사용해서 구현하시오.
    class Stock
    {
    private: //public을 통해서만 데이터 접근가능& 구조체처럼 데이터형들을 선언하면됨
    	//주식 이름, 주식 수, 주가, 주식의 총가지
    	string name;
    	int shares;
    	float share_val;
    	double total_val;
    	void set_total() { total_val = shares * share_val; }
    
    public://주식을 선언,사고,팔고,주식의 총 가격을 업데이트,show해주는 함수
    	
    	void buy(int, float);
    	void sell(int, float);
    	void update(float);
    	void show();
    	Stock(string, int, float);
    	Stock();
    	~Stock();
    };

## 함수의 호출 
 ```cpp
 #include "stock.h"
int main()
{
	cout << "생성자를 이용해 객체 생성\n";
	Stock temp("Panda", 100, 1000);
	//Stock temp = Stock("Panda", 100, 1000);
	
	cout << "디폴트 생성자를 이용하여 객체 생성\n";
	Stock temp2;

	cout << "temp를 temp2에 대입\n";
	temp2 = temp;

	cout << "temp와 temp2 출력\n";
	temp.show();
	temp2.show();

	cout << "생성자를 이용하여 temp 내용 재설정\n";
	temp = Stock("coding", 200, 1000);
	//panda->coding으로 바뀌면서 클래스가 소멸

	cout << "재설정된 temp 출력\n";
	temp.show();
	//프로그램이 종료되면서 생성된 panda, coding클래스가 소멸
	
	return 0;
}

함수의 정의

#include "stock.h"

//:: 사용 범위 결정 연산자를 사용하여 public 함수들을 Stock에 귀속시키자


void Stock::buy(int n, float pr) {
	shares += n;
	share_val = pr;
	set_total();
}

void Stock::sell(int n, float pr) {
	shares -= n;
	share_val = pr;
	set_total();
}

void Stock::update(float pr) {
	share_val = pr;
	set_total();
}

void Stock::show() {
	cout << "주식 이름:" << name << endl;
	cout << "주식 수:" << shares << endl;
	cout << "주가:" << share_val << endl;
	cout << "주식의 총 가치:" << total_val << endl;
	cout << "변경!" << endl;
}
//생성자를 이용해 객체 생성
Stock::Stock(string co, int n, float pr) {
	name = co;
	shares = n;
	share_val = pr;
	set_total();
}
//디폴트 생성자
Stock::Stock() {
	name = "";
	shares = 0;
	share_val = 0;
	set_total();
}
//파괴자(class를 생성하면 자동으로 파괴)
Stock ::~Stock() {
	cout << name << "클래스가 소멸되었습니다. \n";
}
profile
모든 코드에는 이유가 있기에 원인을 파악할 때까지 집요하게 탐구하는 것을 좋아합니다.

0개의 댓글