배운 모든 개념 정리된 stock 클래스
#include <iostream>
using namespace std
class stock{
int data;//default access: private
private:
int data1;
int data2;
string s;
void func();
const int cdata1 =10;
const int cdata2; //뒤에 생성자에서 정의
static int privatenum;
public:
stock(int a,int b, string s="");
//explicit stock(int ~~) 하면, main()에서 stock x = {1,2} 불가능
stock(); //constructor
~stock(); //destructor
stock(const stock &st); //copy constructor
void func1(int x); //멤버 함수
void func2(int x) const ;
//private을 건들지 않는다고 명시
//main에서 const stock food 하고 food.func2(2)하면 에러! 이때 const 뒤에 붙임
stock operator+(const stock &b) const;
friend stock operator-(const stock &a, const stock &b) const;
friend ostream& operator<<(ostream&os, stock &b);
stock operator-() const;
stock &operator =(const stock &st); //assign operator
//연산자 오버로딩
//하나 이상의 user-defined 타입 필요
//새로운 연산자 불가능, 기존 목적과 부합하게
//멤버 함수로만 만들 수 있는 것: = () [] ->
operator string() const{ return s;}
//stock food(1,2,"orange");
//string name = food; ->orange 들어감, explicit이면 불가능!
//string name = (string)food, string(food) 도 가능
static int publicnum;
static void init();
};
inline void stock::func(){
cout <<s; //private 접근 가능
}
void stock::func1(int a){
data1=data1+a; //private 접근 가능
statement;
}
void stock::func2 const (int a){
data1=data1+a; //private 접근 가능
statement;
}
stock::stock(int a,int b, string str)
: cdata2(10) //선언과 동시에 초기화 ->속도 향상
{
this->data1=a; //this: 자기 자신을 반환함
data2=b;
s=str;
}
stock::stock()
: s("default name"), cdata2(10)
{
data1=0;
data2=0;
s="";
}
stock::~stock(){ //called at: 인스턴스 할당 해제, 프로그램 종료시
statement; //usually, dynamically deallocate memory
}
stock stock::operator+(const stock &b) const{
return stock(data1+b.data1, data2+b.data2,"cook");
}
inline stock operator-(const stock &a, const stock &b) const{
return stock(a.data1+b.data1, a.data2+b.data2, "cook");
}
ostream& operator<<(ostream&os, stock &b){
os<<b.data1<<b.data2;
return os;
}
stock stock::operator-() const{
return stock(-data1,-data2,"");
}
stock &stock::operator =(const stock &st){
if(this==&st) return *this;
delete ~~(자기 데이터)
new ~~ ->deep copy
data1 = st.data1;
~~
}
int stock::publicnum = 0; //static 변수: 밖에서 정의
void stock::init(){ //static method: static만 건드릴 수 있음
privatenum=1;
}
stock::stock(const stock &st){ //copy constructor
data1=st.data1;
~~
//하는 이유: 그냥 놔두면, 동적할당한것도 그냥 똑같이 해버려서
//같은걸 가리키게 되고 나중에 복잡해짐
//따라서 동적할당된 데이터를 복사해야 한다면, 복사본에다가 새로운 동적할당
//deep copy
}
int main(){
stock stocks[20]={
stock food1 = stock;
stock food2 = stock();
stock food3 = stock(1,2,"apple");
stock food4(3,4,"banana");
stock food5;
stock food6(); //함수선언임!
}
stock food7 = food1+ food2;
cout << food7;
stock food8 = food; //copy constructor
stock food9;
food9 = food8; //copy 호출, assign 작동
}