일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 교류직류
- 유튜브 서버
- 유튜브 먹통
- 유튜브 서버 터짐
- 다중적분
- PnP
- 펠리칸만년필
- 일대일대응
- 본명조와 본고딕 글씨체가 맘에 들어요.
- 언젠가 나도 내집을 꾸미겠지.
- 일대일변환
- Pelican
- 필사용 만년필
- 필사
- 유튜브 에러
- inhaler
- 미술관 가고싶다.
- 부분인쇄
- 서버 터짐
- timetimer
- AC DC
- 변수변환
- timetimermod
- 꿀팁
- icecreamsundae
- MOD
- Transistor
- 읽었던 것도 다정리해놔야겠다.
- npn
- 내돈
Archives
Woooniverse
[C++] 오퍼레이터 함수의 리턴값은 원래 값에 영향을 못준다. 본문
#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 * 이 필요한 경우는
삼항 === 인 경우에
'공부 > C++' 카테고리의 다른 글
[C/C++] const 의 위치별 역할 (0) | 2021.07.12 |
---|---|
[C/C++]함수의 반환형에 &가 들어가는 경우 (0) | 2021.07.11 |
[C++]템플릿 클래스와 생성자 (0) | 2021.07.08 |
[C++]상속 클래스의 기본생성자는 어떻게 해야될까? (0) | 2021.07.07 |
Comments