멤버 메서드의 활용
멤버 메서드는 선언과 정의를 분리하는 것이 좋음
- 함수 내에서 다른 함수를 참조 하는 것처럼 멤버 메서드 내에서 다른 메서드를 참조할 수 있기 때문
#include <iostream>
using namespace std;
class Vector2 {
public:
// Vector2() : x(0), y(0) {}
Vector2();
// Vector2(float x, float y) : x(x), y(y) {}
Vector2(float x, float y);
// get함수는 const로 선언하는 것이 좋음
// float GetX() const { return x; }
float GetX() const;
// float GetY() const { return y; }
float GetY() const;
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);
// rhs.GetX()를 사용 안해도 된다.
// 참조 : https://blog.naver.com/PostView.naver?blogId=tipsware&logNo=221667799577
}
private:
float x;
float y;
};
// 선언과 정의 분리
Vector2::Vector2() : x(0), y(0) {}
Vector2::Vector2(float x, float y) : x(x), y(y) {}
float Vector2::GetX() const { return x; }
float Vector2::GetY() const { return y; }
/* --> 정적 함수로
Vector2 Sum(Vector2 a, Vector2 b) {
return Vector2(a.GetX() + b.GetX(), a.GetY() + b.GetY());
}
*/
int main(void) {
Vector2 a(2, 3);
Vector2 b(-1, 4);
cout << a.GetX() << " , " << a.GetY() << '\n';
cout << b.GetX() << " , " << b.GetY() << '\n';
Vector2 c = Vector2::Sum(a, b);
Vector2 c2 = a.Add(b);
cout << c.GetX() << " , " << c.GetY() << '\n';
cout << c2.GetX() << " , " << c2.GetY() << '\n';
}
static Vector2 Sum(Vector2 a, Vector2 b) (정적으로 선언)
Vector2 Add(Vector2 rhs) (동적으로 선언)
객체 a에 매개변수로 b를 받아 a + b를 리턴
이와 같은 함수의 형태를 기반으로 연산자 오버로딩이 가능함(다음 챕터에서 다룸)
참조) 두들낙서 C/C++ 강좌
'Programming Language > C++' 카테고리의 다른 글
[C++] 동적할당 (0) | 2024.02.04 |
---|---|
[C++] 연산자 오버로딩 (0) | 2024.02.04 |
[C++] 상수형 매개변수와 상수형 메서드 (0) | 2024.02.04 |
[C++] 클래스(Class) (2) - 정적 멤버, 정적 메서드 (0) | 2024.01.30 |
[C++] 클래스(Class) (1) (0) | 2024.01.30 |