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

[C++ 기초 문법] 추상화와 클래스

SW Developer 2024. 2. 11. 21:44

추상화와 클래스

 

추상화란?

어떤 객체를 사실적으로 표현하는 것이 아니라, 공통된 특징을 일정한 방식으로 이해하기 쉽게 표현하는 것이다

 

클래스란?

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

 

데이터형이란?

데이터형을 대상으로 어떠한 연산을 수행할 수 있는지 알 수 있다

 


 

private형 멤버와 public형 멤버를 가진 ClassStock을 정의해보자

 

 

※ private vs public

① private 

비공개 멤버, 클래스 내에서만 접근 가능하다 (데이터 은닉)

② public 

공개 멤버, 클래스 외부에서도 접근 가능하다

 

 

 예시코드

 

[stock.h]

헤더파일에 Stock 클래스 정의 및 함수의 원형 제공

#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

 

[func.cpp]

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;
    cout << endl;
}

 

※ 범위결정 연산자 :: (double colon)

범위결정 연산자인 :: 은 복합 데이터 형식의 정적 멤버에 대한 엑세스를 제공한다.

 

[main.cpp]

main 코드에 Stock 클래스 변수 temp를 선언한 후, Stock 클래스 내 함수 acquire를 활용하여 name, shares, share_val의 값을 초기화한다. 그 후 buy 함수를 통해, shares의 개수를 10만큼 늘린 후 share_val의 값을 1200으로 초기화한다. 그리고 함수 show를 통해 지금까지 변경한 private 변수들인 name, shares, share_val, total_val을 출력할 수 있다.

#include <iostream>
#include "stock.h"

int main()
{
    Stock temp;
    temp.acquire("ITLover", 100, 1000);
    temp.show();
    /*
    회사명: ITLover
    주식 수: 100
    주가: 1000
    주식 총 가치: 100000
    */

    temp.buy(10, 1200);
    temp.show();
    /*
    회사명: ITLover
    주식 수: 110
    주가: 1200
    주식 총 가치: 132000
    */

    temp.sell(5, 800);
    temp.show();
    /*
    회사명: ITLover
    주식 수: 105
    주가: 800
    주식 총 가치: 84000
    */

    return 0;
}

 

 

 

 

 

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

https://inf.run/pypW