앞에서 배운 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 = 0double 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