두 복소수의 합을 구하는 Add함수 구현을
이런식으로 했는데 워닝이 뜨네요...
클래스 변수 z가 함수실행이 끝난뒤 해제되어서 그런거 같은데
다른 방법이 있을까요?ㅠㅠ
Complex& Add(const Complex &y)
{
Complex z(0,0);
z.re = re + y.re;
z.im = im + y.im;
return z;
}
이런식으로 했는데 워닝이 뜨네요...
클래스 변수 z가 함수실행이 끝난뒤 해제되어서 그런거 같은데
다른 방법이 있을까요?ㅠㅠ
아래는 클래스 원형입니다.
class Complex
{
private:
double re, im;
public:
Complex();
Complex(const double _re, const double _im);
~Complex();
void SetRe(const double _re);
const double GetRe();
void SetIm(const double _im);
const double GetIm();
ostream& Display(ostream &out);
Complex& Add(const Complex &y);
Complex& Subtract(const Complex &y);
Complex& Multiply(const Complex &y);
Complex& Divide(const Complex &y);
};
애초에 생성해서 반환할꺼면 레퍼런스로 반환하는 이유가 먼데?? 걍 복사하면 되는걸
의도는 모르겠지만 지역 변수의 레퍼런스를 반환하려는 시도를 한것 부터 생각을 해보시면됨.. 그렇다고 동적할당을 해서 힙메모리의 주소를 뱉는 것도 아니고, 값에의한 전달을 추천함 혹여나 성능을 생각한다면 출력할 값을 씌어줄 인자를 포인터로 받아서 거기다 직접 대입을 해주는 것도 고려해볼만함 bool Add(const Complex& y,Complex* res){ *res.re = re + y.re; res.im = im + y.im; return true;}
미안 * 하나 빠졌네
그리고 프라이빗이라 원칙적으론 세터 게터를 추가하던가 퍼블릭도 권장함 객체 지향이니 하면서 은닉은닉 하는데 은닉을 할께 있고 안할 녀석이 있는거임 세터 게터를 쓰면 인라인이 아닌 이상 함수 진입 비용이 드니까 생각해둬도 되는데 요즘 이런거 신경은 쓰나 ? 낄낄 좀빨라야지
그리고 연산자 를 재정의 하는것도 생각해보면 좋겠음 저걸 정말 쓰겠다면야 ...