member_functions — 멤버 함수
member_functions — 멤버 함수 (Member functions)
**멤버 함수(member function)**는 클래스/구조체 안에 정의된 함수로, 특정 객체의 데이터에 접근·조작하는 함수예요.
객체가 가진 데이터(멤버 변수)를 다루는 동작을 클래스 안에 묶어둬요. 객체.멤버함수() 형태로 호출해요. this 포인터로 호출한 객체에 접근할 수 있어요.
출처: cppreference
본문
멤버 함수는 클래스의 멤버로 선언된 함수예요. 객체에 대해 동작하며 this로 호출 객체에 접근해요.
정의와 호출
struct Counter {
int count = 0;
void increment() { ++count; } // 멤버 함수
int get() const { return count; } // const 멤버 함수
};
Counter c;
c.increment();
int n = c.get();
const 멤버 함수
const 멤버 함수는 객체를 수정하지 않는다는 계약이에요. const 객체에서도 호출할 수 있어요.
struct S {
int x;
int get() const { return x; } // const: 수정 불가
void set(int v) { x = v; } // 비const: 수정 가능
};
this 포인터
멤버 함수 안에서 this는 호출 객체를 가리켜요. 매개변수와 멤버 이름이 겹칠 때 구분에 쓰여요.
struct S {
int x;
void set(int x) { this->x = x; } // this->x 는 멤버, x 는 매개변수
};
cv/ref 한정자
const— const 객체에서 호출 가능volatile— volatile 객체에서 호출 가능&,&&(ref-qualifier) — lvalue/rvalue 객체에서만 호출
struct S {
void f() & { } // lvalue 에서만
void g() && { } // rvalue 에서만
};
static 멤버 함수
static 멤버 함수는 객체 없이 호출돼요. this가 없고, 비정적 멤버에 직접 접근할 수 없어요.
struct Math { static int square(int x) { return x * x; } };
Math::square(3);
virtual 멤버 함수
가상 멤버 함수는 파생 클래스에서 오버라이드되어 다형성을 제공해요.
인라인과 정의 위치
클래스 안에 정의된 멤버 함수는 암시적으로 인라인이에요. 클래스 밖에서 정의할 수도 있어요.
struct S {
void f(); // 선언만
};
void S::f() { /* 정의 */ } // 클래스 밖 정의
오버로딩
같은 이름의 멤버 함수를 매개변수로 구분해 여러 개 만들 수 있어요.
노트 (Notes)
- 멤버 함수는 캡슐화의 핵심이에요 — 객체의 상태를 안전하게 다뤄요.
- 특수 멤버 함수(생성자, 소멸자, 복사/이동)라는 별도 범주도 있어요.