앞에서 배운 this pointer의 기본 개념을 적용해보면서 이해를 돕고자 한다.
앞서 진도를 나가기 전에, 실제 프로그램(main)과 class member의 관계에 대해 살펴보고자 한다.
(class의 내용에 대해 깊히 볼 필요 없다. 단지 total_val 변수와 이 변수의 값을 외부적(class 바깥 즉,main의 입장)으로 보여주는 함수가 있는지의 여부만 파악하라.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 |
class Stock
{
private:
std::string company;
long shares;
double share_val;
double total_val;
void set_tot() { total_val = shares * share_val; }
public:
// two constructors
Stock(); // default constructor
Stock(const std::string & co, long n = 0, double pr = 0.0);
~Stock(); // noisy destructor
void buy(long num, double price);
void sell(long num, double price);
void update(double price);
void show();
}; |
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 |
void Stock::show()
{
using std::cout;
using std::ios_base;
// set format to #.###
ios_base::fmtflags orig =
cout.setf(ios_base::fixed, ios_base::floatfield);
std::streamsize prec = cout.precision(3);
cout << "Company: " << company;
<< " Shares: " << shares << ‘\n’;
cout << " Share Price: $" << share_val;
// set format to #.##
cout.precision(2);
cout << " Total Worth: $" << total_val << ‘\n’;
// restore original format
cout.setf(orig, ios_base::floatfield);
cout.precision(prec);
} |
cs |
Stock class 정의는 data를 나타내긴 하지만, 분석력에 있어서 다소 부족하다. 예를 들어, 우리는 show() method를 가지고 그 결과를 보면, 가지고 있는 holdings(보유 주식) 중에 가장 큰 값이 어느 것인지를 말해 줄 수 있다. 그러나, 프로그램은 total_val에 직접 접근할 수 없기 때문에 위와 같은 문제에 대해서 대답해 줄 수 없다. 프로그램이 저장된 data에 대해 알게 하는 가장 직접적인 방법은 value를 반환하는 method들을 제공하는 것이다. 전형적으로 다음과 사용한다:
1
2
3
4
5
6
7
8
9 |
class Stock {
private:
...
double total_val;
...
public:
double total() const { return total_val; };
...
}; |
cs |
'객체 지향 설계' 카테고리의 다른 글
Class (0) | 2018.06.27 |
---|---|
string Streams (0) | 2018.06.26 |
Knowing Your Objects: this Pointer 1. (0) | 2018.02.25 |
static Class Members (0) | 2018.02.25 |
Automatic Storage, Static Storage, and Dynamic Storage (0) | 2018.02.23 |