Programming Language/C++

[C++] 멤버 메서드의 활용

lumana 2024. 2. 4. 06:21

멤버 메서드의 활용


  • 멤버 메서드는 선언과 정의를 분리하는 것이 좋음

    • 함수 내에서 다른 함수를 참조 하는 것처럼 멤버 메서드 내에서 다른 메서드를 참조할 수 있기 때문
#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++ 강좌