728x90

1) this 포인터

: 멤버함수를 호출하는 데 사용된 객체를 지시 (본질은 포인터 ; 주소값을 리턴)

 

#ifndef FIRE_C_STOCK_STRUCTURE_H
#define FIRE_C_STOCK_STRUCTURE_H
#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 show();
    Stock compare(Stock& stock);

    Stock(string, int, float); 
    Stock(); 
};

void Stock::show() {
    cout << "회사 명 : " << name << endl;
    cout << "주식 수 : " << shares << endl;
    cout << "주가 : " << share_val << endl;
    cout << "주식 총 가치 : " << total_val << endl << endl;
}

Stock Stock::compare(Stock& stock){
    if(stock.total_val >= total_val)
        return stock;
    else return *this; //this pointer //호출한 객체 자기 자신을 가리킴
}

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

Stock::Stock(){
    name = "None";
    shares = 0;
    share_val = 0;
    set_total();
}
#endif //FIRE_C_STOCK_STRUCTURE_H
#include "stock_structure.h"

int main() {

    Stock temp = Stock("Panda", 100, 1000);
    Stock temp2("another", 200, 2000);
    temp.compare(temp2).show();
    return 0;}

/* 주식 총 가지가 더 높은 stock 클래스 객체가 출력됨
 * 
회사 명 : another
주식 수 : 200
주가 : 2000
주식 총 가치 : 400000*/

 

2) 클래스로 이루어진 배열

#include "stock_structure.h"

int main() {

    Stock s[4] = { //배열의 각 원소는 ;가 아닌 , 로 구분
            Stock("A", 10, 1000),
            Stock("B", 20, 2000),
            Stock("C", 30, 3000),
            Stock("D", 40, 4000)
    };

    Stock first = s[0]; //first: stock 배열에서 total이 가장 높은 것을 저장
    for(int i=1; i<4; i++)
        first = first.compare(s[i]);

    first.show();
    return 0;
}

→ 기존에 배열 만들고 활용하는 방식과 완전 동일함

 

**참조자 사용

#include "stock_structure.h"

int main() {

    Stock s[4] = { //배열의 각 원소는 ;가 아닌 , 로 구분
            Stock("A", 10, 1000),
            Stock("B", 20, 2000),
            Stock("C", 30, 3000),
            Stock("D", 40, 4000)
    };

    Stock* first = &s[0]; //값을 직접 대입하는 것이 아니라 주소로 참조하도록 함
    for(int i=1; i<4; i++)
        first = &first->compare(s[i]); //왜지왜지왜지왜지

    first->show();
    return 0;
}
#ifndef FIRE_C_STOCK_STRUCTURE_H
#define FIRE_C_STOCK_STRUCTURE_H
#include <iostream>
using namespace std;

class Stock {
private:
    //private member의 값을 변경하려면 public에 선언된 함수를 통해서만이 가능
    //private member에는 '직접' 접근할 수 없음 : 데이터 은닉
    string name;
    int shares;
    float share_val;
    double total_val; //double: float과 같이 실수를 표현하되 더 넓은 범위를 표현함
    void set_total() {total_val = shares * share_val;}
    //private에서 함수 포함 가능

public: //public member 함수: private member의 값을 변경할 수 있는 단위
    void show();
    Stock& compare(Stock&);

    Stock(string, int, float); //입력이 있는 생성자
    // 기존의 acquire 함수 대체 //클래스 생성할 때 init하는 것들
    Stock(); //Default 생성자
};

void Stock::show() {
    cout << "회사 명 : " << name << endl;
    cout << "주식 수 : " << shares << endl;
    cout << "주가 : " << share_val << endl;
    cout << "주식 총 가치 : " << total_val << endl << endl;
}

Stock& Stock::compare(Stock &stock){
    if(stock.total_val >= total_val)
        return stock;
    else return *this;
}

//Stock 클래스 내부에서 귀속되어 있음
/* 생성자 */
Stock::Stock(string co, int n, float pr){
    name = co;
    shares = n;
    share_val = pr;
    set_total();
}
/* Default 생성자 */
Stock::Stock(){
    name = "None";
    shares = 0;
    share_val = 0;
    set_total();
}
#endif //FIRE_C_STOCK_STRUCTURE_H

 

728x90

+ Recent posts