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
'개발 > c++' 카테고리의 다른 글
[c++] friend (feat. 연산자 오버로딩 응용) (0) | 2023.09.10 |
---|---|
[c++] 연산자 오버로딩 (0) | 2023.09.10 |
[c++] 추상화와 클래스 / 클래스 생성자와 디폴트 생성자 / 클래스 파괴자 (1) | 2023.09.08 |
[c++] 분할 컴파일 / Preprocessor & Compiler & Linker (2) | 2023.09.08 |
[c++] 배열과 문자열이 헷갈리지 (1) | 2023.09.07 |