추상화와 클래스
추상화란?
어떤 객체를 사실적으로 표현하는 것이 아니라, 공통된 특징을 일정한 방식으로 이해하기 쉽게 표현하는 것이다
클래스란?
추상화를 사용자 정의 데이터형으로 변환해주는 수단이다
데이터형이란?
데이터형을 대상으로 어떠한 연산을 수행할 수 있는지 알 수 있다
private형 멤버와 public형 멤버를 가진 Class인 Stock을 정의해보자
※ 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;
}
※ 해당 게시글은 개인 학습의 목적으로, 아래 강의를 수강한 후 정리한 학습노트입니다.
'C++ 프로그래밍 > 기초 문법' 카테고리의 다른 글
[C++ 기초 문법] 클래스 Array와 *this (0) | 2024.02.12 |
---|---|
[C++ 기초 문법] 클래스 생성자와 파괴자 (0) | 2024.02.12 |
[C++ 기초 문법] 분할 컴파일 (0) | 2024.02.11 |
[C++ 기초 문법] 함수의 템플릿(template) (0) | 2024.02.11 |
[C++ 기초 문법] overloading (0) | 2024.02.11 |