[C++]코딩연습장

C++ [클래스]

KAU 2021. 2. 22. 18:29


#include <iostream>

using namespace std;

int main() {
	cout << "Hello, World!" << endl;
	return 0;
}

클래스란?

추상화를 사용자 정의 데이터형으로 변환해주는 수단

 

추상화란 무엇인가?

어떠한 객체를 사실적으로 표현하는 것이 아니라,

공통된 특징을 간결한 방식으로, 이해하기 쉽게 표현하는 것

 

1. 클래스 선언

class 클래스이름

{

접근제어지시자1:

    멤버변수1의타입 멤버변수1의이름;

    멤버변수2의타입 멤버변수2의이름;

    ...

    멤버함수1의 원형

    멤버함수2의 원형

    ...

};

2. 클래서 매소드 정의

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();
	~Stock();
};

private과 public은 클래스의 멤버에 대한 접근을 제어하는것이다.

private의 값을 변경하고 싶다면 public을 통해서 변경해야 한다.

public의 멤버함수를 통해서만 접근할 수 있기 때문에

직접적인 접근을 막는다.

이것을 데이터 은닉이라고 하며 추상화의 예 중에 하나다.

 

3.멤버 함수의 정의

클래스에서 멤버 함수를 정의하는 방법은 일반 함수의 정의와 크게 다르지 않습니다.

C++에서는 멤버 함수를 클래스의 선언 안이나 밖에서 모두 정의할 수 있도록 허용합니다.

void Book::Move(int page) { current_page_ = page; }
반환타입 클래스이름::멤버함수이름(매개변수목록) { 함수의 몸체; }

클래스의 선언 밖에서 멤버 함수를 정의할 때에는 범위 지정 연산자(::)를 사용하여 해당 함수가 어느 클래스에 속하는지를 명시해야 합니다.


전체 코드

#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();
		~Stock();
		
	};
    
	void Stock::acquire(string co, int n, float pr) {
		name = co;
		shares = n;
		share_val = pr;
		set_total();
	}

	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;
	}
	Stock::Stock() {
	}

	Stock::~Stock()
	{
	}
    
	int main() {

		Stock temp;
		temp.acquire("Panda", 100, 1000);
		temp.show();
		temp.buy(10, 1200);
		temp.show();
		temp.sell(5, 800);
		temp.show();

		return 0;

	}


분할 컴파일

 

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();
	Stock();
	~Stock();

};
#endif

 

func.cpp

#include "Stock.h"

void Stock::acquire(string co, int n, float pr) {
	name = co;
	shares = n;
	share_val = pr;
	set_total();
}

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;
}
Stock::Stock() {
}

Stock::~Stock()
{
}

 

main.cpp

#include "Stock.h"

	int main() {

		Stock temp;
		temp.acquire("Panda", 100, 1000);
		temp.show();
		temp.buy(10, 1200);
		temp.show();
		temp.sell(5, 800);
		temp.show();

		return 0;

	}


 

'[C++]코딩연습장' 카테고리의 다른 글

C++ [분할컴파일]  (0) 2021.02.22
C++ [참조 변수] [함수 템플릿]  (0) 2021.02.21
C++ [Function]  (0) 2021.02.21
C++ [포인터와 메모리 해제] [포인터 연산] [동적 구조체]  (0) 2021.02.21
C++ [구조체]  (0) 2021.02.21