본문 바로가기
C++/기초(두들낙서)

[C++ 기초] 멤버 메서드 활용

by Meaning_ 2022. 1. 14.
728x90
반응형

멤버 메서드의 선언, 정의 분리 

멤버 메서드는 대부분 선언, 정의를 분리한다.

 

 

 

네임스페이스에서 배웠던 것 처럼 a,b,c 선언해주고 정의는 뒤에 빼준다.

근데 static 공부할 때 클래스를 네임스페이스 취급해주는 걸 배웠다.

 

클래스에 포함된 메서드도 네임스페이스 취급해주는데 이걸 예제를 통해 알아보자.

 

[예제] 성분이 2개인 벡터 클래스를 만들어보자. (고등학교 기하시간에 배우는 벡터임)

 

매개변수를 가지고 있지 않은 디폴트 생성자를 만들어주고, 생성자 초기화 목록을 통해 0으로 초기화,

생성자 오버로딩을 통해 매개변수 x,y를 각각 받아준 생성자를 x,y로 초기화 시켜준다. 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
 
using namespace std;
 
class Vector2 {
public:
    Vector2():x(0),y(0){}
    Vector2(float x,float y):x(x),y(y){}
 
    float GetX() const
        return x;
    }
    float GetY() const {
        return y;
    }
private:
    float x;
    float y;
};
 
 
int main() {
 
}
cs

 

여기서

이 디폴트 생성자의 선언과 정의를 분리해주려한다. 

이렇게 분리해주면 에러가 뜨는데 이유는 컴퓨터가 어디에 속한 Vector2인지 모르기 때문이다.

 

 

그래서 클래스를 네임스페이스처럼 사용해주면 선언과 정의를 분리할 수 있다. 

 

나머지 메서드들도 선언과 정의를 분리하면

 

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
#include <iostream>
 
using namespace std;
 
class Vector2 {
public:
    Vector2();
    Vector2(float x, float y);
 
    float GetX() const;
    float GetY() const;
private:
    float x;
    float y;
};
 
 
 
int main() {
    Vector2 a(23);
    Vector2 b(-14);
    cout << a.GetX() << " , " << a.GetY() << endl;
    cout << b.GetX() << " , " << b.GetY() << endl;
}
 
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; }
cs

 

정적 메서드와 동적 메서드 

 

 

벡터 연산을 해주는 c라는 객체를 만들어봤다.

당연히 에러가 뜬다. 컴퓨터는 같은 클래스 객체간의 덧셈하는 방법을 모르기 때문이다.

 

그래서 해결책으로 리턴값이 Vector2인 두 벡터를 덧셈해주는 Sum함수를 만들었다.

 

 

이렇게 어떤 객체에도 소속되어 있지 않고 그냥 클래스에 소속되어있는 함수를 정적 함수라 한다.

그렇기에 매개변수에 어떤거에 어떤거를 더하는지 일일이 알려줘야한다.

 

 

이번에는 정적함수 대신에 동적함수를 만들어볼거다. 

 

앞서 a라는 객체를 선언해줬는데 이 a라는 객체 자신이 Add 함수를 통해 들어오는 매개변수와 덧셈을 진행하는 함수를 만들어볼거다.

 

 

우선 main 함수에 Vector2 c2=a.Add(b) 라고 해준다. 왜 a.Add냐 물으면 객체 자기자신에다가 매개변수로 들어오는 애를 더하기 때문이다. 이를 동적함수라한다. 

 

그리고 동적함수이기 때문에 당연히 앞에 static은 붙여주지 않는다!

 

 

동적함수 Add는 정적함수 Sum과 달리 동적이기에 특정한 객체에 포함되어있을 수 있다.

이미 포함되어있는 객체(a)와 매개변수 rhs(이건 사실상 b가 된다)와 연산을 시켜주는 것이다. 

 

 

c1과 c2 모두 같은 값이 출력되는 것을 확인할 수 있다. 

728x90
반응형

댓글