#include <iostream>

using namespace std;

class Account {
public:
	Account() : money(0) {};
	Account(int money) : money(money) {};
	
	void Deposit(int d);
	void Draw(int d);
	int ViewMoney(void);
		
private:
	int money;
};

void Account::Deposit(const int d)
{
	~~d = money;~~
	money += d;
}

void Account::Draw(int d)
{
	if (money >= d) {
		money -= d;
	}
}

Const int Account::ViewMoney() const
{
	~~money++;~~
	return money;
}

int main() {

}

메서드의 상수화: 메서드안에서 자기가 속한 다른 멤버변수를 건들수없게 만들어버리는거야!

리턴만해주는 역할인데 값이 바뀌면 안되는경우,,,메서드를 상수화시켜버려! 주로 멤버변수값을 얻어오게하는 Get함수에서 사용할만함. 어떻게? 함수 옆에 const 붙여서

매개변수의 상수화: 어떤 함수의 인자로 주는 매개변수가 그 함수 내에서 값이 변하지 안도록 상수화시켜버려! 혹시모를 실수를 방지하는 역할을 하게됨.

함수앞에 const를 붙이는거는 무슨의미? 리턴값이 상수라는거. 사실 대부분 그래서 의미가 별로 없는경우 많아.

멤버 메서드 활용하기

#include <iostream>

class Vector2 {
private:
	float x;
	float y;
public:
	Vector2();
	Vector2(float x, float y);

	static Vector2 Sum(Vector2 a, Vector2 b) { // 정적인 멤버메소드
		return Vector2(a.x + b.x, a.y + b.y);
	}
	
	Vector2 Add(Vector2 rhs) { // 동적인 멤버메소드
		return Vector2(x + rhs.x, y + rhs.y);
	}	

	Vector2 operator+(Vector2 rhs) { // 같은 클래스 객체간 + 연산의 규칙 지정, 동적 메소드. 연산자 오버로딩임
		return Vector2(x + rhs.x, y + rhs.y);
	}

	float GetX() const;
	float GetY() const;
};

Vector2::Vector2(): x(0), y(0) { }
Vector2::Vector2(float x, float y): x(x), y(y) { }

int main()
{
	Vector2 a(2,3);
	Vector2 b(-1, 4);
	Vector2 c = a + b;
	Vector2 c1 = Vector2::Sum(a,b);
	Vector2 c2 = a.Add(b);
}

선언과 정의 분리하고, const로 메소드의 상수화 하고, 매개변수도 상수화하는게 좋음! 가능하다면!