공부/C++
[C++] 오퍼레이터 함수의 리턴값은 원래 값에 영향을 못준다.
Woo宙
2021. 7. 6. 15:46
#include <iostream>
using namespace std;
class Account {
string name, id;
int balance;
public:
Account(string input_name = "defalut_name", string input_id = "defalut_id", int input_bal = 0) :
name(input_name), id(input_id), balance(input_bal) {} //생성자 및 defalut 초기화
string getName(void)const;
string getID(void)const;
int getBal(void)const;
Account operator+(const Account& someone_account)
{
Account result(this->name, this->id, this->balance + someone_account.getBal());
return result;
}
Account operator-(const Account& someone_account)
{
Account result(this->name, this->id, this->balance - someone_account.getBal());
return result;
}
Account& operator=(const Account& right_account)
{
//#CASE1//Account result(right_account.getName(), right_account.getID(), right_account.getBal());
// return result
//#CASE2// this->balance = right_account.getBal();
this->name = right_account.getName();///#CASE3
this->id = right_account.getID();
this->balance = right_account.getBal();
return *this;
}
};
//수금자 계산
ac_list[index_r] = (ac_list[index_r] + ac_list[index_t]);
//송금자
ac_list[index_t] = (ac_list[index_t] - ac_list[index_t]);
이런 경우에 왜 CASE#1이 안되는지 궁금할 수 있다.
이건 살짝 함정에 빠진거다.
오퍼레이터 함수에서의 RETURN 값은 원래 객체에 아무런 영향을 미치지 못한다.
예를 들어
c <- a+b 라 했을 때
c <- a.+b 라면
a+b의 리턴값으로 객체를 만드는거지 a에 영향을 주진 못한다.
똑같은 생각으로
a = b 라 하면
a .=b 어떤 객체를 리턴할뿐이지, a의 값이 변하는 건 아니다.
a의 값을 변화시키고 싶다면 리턴값을 변화시키는 것이 아닌 내부의 멤버데이터를 직접적으로 건드려야 된다.
this->name = right_account.getName();///#CASE3
this->id = right_account.getID();
this->balance = right_account.getBal();
이렇게 말이다
인터넷에 죽어라 찾아도 안나와서 두 시간 동안 삽질했는데
군대 후임느님한테 물어봐서 알았다.
외쳐 갓차녁
++)팁 return * 이 필요한 경우는
삼항 === 인 경우에