Woooniverse

[C++] 오퍼레이터 함수의 리턴값은 원래 값에 영향을 못준다. 본문

공부/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 *  이 필요한 경우는 

삼항 === 인 경우에

Comments