#include <iostream>
using namespace std;
class Complex {
private :
float x, y;
float buff_x, buff_y;
static int count;
public :
Complex(float a, float b) : x(a),y(b)
{
count++;
buff_x = x;
buff_y = y;
}
Complex() : x(0), y(0), buff_x(0), buff_y(0)
{
count++;
}
void Print()
{
cout << \"(\" << x << \",\" << y << \")\" << endl;
}
Complex& Add(const Complex &a)
{
buff_x = x + a.x;
buff_y = y + a.y;
return *this;
}
Complex& Mul(const Complex &b)
{
buff_x = x * b.x;
buff_y = y * b.y;
return *this;
}
static int GetCount() { return count;}
~Complex(){count--;}
void operator=(const Complex& rhs)
{
x = rhs.buff_x;
y = rhs.buff_y;
};
};
int Complex::count = 0;
int main(void)
{
Complex com1(1.0, 2.0), com2(3.0, 4.0);
Complex com3;
com1.Print();
cout << endl;
com2.Print();
cout << endl;
com3 = com1.Add(com2);
com3.Print();
cout << endl;
Complex *pcom4 = new Complex;
*pcom4 = com1.Mul(com2);
pcom4->Print();
cout << endl;
cout << \"#complex numbers : \" << com1.GetCount() << endl;
delete pcom4;
cout << \"#complex numbers : \" << com1.GetCount() << endl;
return 0;
}
이게 내가 연산자 오버로딩 써서 한건데... 이런방식은 괜찮나 모르겠다..
buff 가 동적 할당해준거지
아니 동적할당 안쓴거야
대입연산자(=)를 오버로딩한거야
void operator=(const Complex& rhs) 이게 연산자 오버로딩 함수임
아 이거 보니깐 비슷하게 할수 있을거같아 전역 변수에 임시 객체 하나 만들어서 buff 에서 쓰는 것처럼 돌리면 될듯 횽 한번 해보고 올게 ㅋ
이렇게 하면 main문 변경안되고도 결과값을 얻을수있음..
전역에서 쇼부쳐봐야할듯
정 안돼면 저거라도 아.. 약기운에 죽것네
전역에 쇼부치느니 차라리 오버로딩 쓰는게 나음... 전역쓰는순간 C++이 아님
전역쓸바에는 클래스 내부에서 관리가능한 동적할당 사용하는게 훨 나으니까.. 전역은 쓰지마라
전역에서ㅡ 동적할당하나 내부에서 하나 동적할당은 상관없지 않아
?
나중에 delete만 해주면 되는거자나
전역을 쓰는 순간 객체화가 안되자나 ..그럼 굳이 class를 쓰는 이유조차 없어지는 건데..
솔까말 그럴꺼면 그냥 아싸리 전역변수에 x,y만들어 놓고 이거 쓰면되지 동적할당할 필요도 없지..
아 그렇네 일단 형꺼 변형 한번 해볼께 내가 저거 주석쓸 자신이 없어서;;
내꺼 변형할려면 내부에 동적할당 하나 만들어놓고 쓰는 수밖에 없는데... 그러면 나중에 객체 몇갠지 찍을때 꽤 많이 나올껄...객채 하나 만들때마다 실질적으로는 2개씩 만들어지니까..