본문 바로가기
!?/C++

클래스 2

by Where's my namespace 2012. 8. 19.

클래스 2 에서는 inline 함수와 const 함수, 멤버함수의 포인터, 클래스의 동적할당에 대해 알아보자.

 

우선 inline 함수에 대해 알아보자.   

inline 함수의 사용법은

 

inline 함수정의;

 

이다. 그저 일반 함수의 앞에 inline 을 붙여주면 된다. 다만 인라인함수를 붙여준다고해서 모든 함수가 인라인 함수가 되는건 아니다. 컴퓨터 내부적으로 인라인함수로 만들지 말지를 결정한다.

그래서 보통 인라인 함수를 정의 할때는 간결한 코드일 경우만 하는 것이 좋다.

inline 함수는 함수처럼 정의 하기는 하지만 실제는 그 함수를 호출한 부분에 코드를 복사해서 넣어두는 것이다. 

예를 들어보면

 

inline void print() {

cout << "1111" << endl;

}

int main() {

print();

return 0;

}

 

의 예를 보면 메인 함수 내부에서 print 를 호출했을 때 일반적인 함수처럼 함수부분으로 갔다가 다시 돌아오는 형식이 아니라, 단순 코드를 붙여 넣는다.

inline 함수를 쓰면 성능의 향상을 가져 올 수도 있지만, 갈수록 프로그램이 무거워진다는 단점이 있다. 

 

이 inline 함수를 클래스에서도 사용 할 수 있다.

 

일반적으로 클래스 내부에 정의한 함수는 자동적으로 inline 함수가 된다. 하지만 원형만 클래스에 있고, 구현을 다른 곳에 한 경우에는 앞에 inline 을 붙여주어야 인라인 함수가 된다.

한가지 중요한점은, 클래스 외부에 함수를 정의 할 경우, 헤더파일에 정의 해야한다.

 

 

const함수에 대해 살펴보자.

const 함수의 사용법은 다음과 같다.

 

클래스 멤버함수() const

 

과 같이 정의 한다. 단순히 클래스 함수정의 와 같은데 뒤에 const 를 붙여 주는 것 뿐이다. 이렇게 const 속성을 부여해

버릴 경우에는 멤버변수의 값을 읽기만 가능하고 고치거나, 새로 쓸 수 가 없다. 단순히 읽기용도로만 쓰는 경우에는 const 속성을 부여해서 사용하면 된다. 하지만 중요한 점은 const 속성이 부여된 함수의 경우 const 속성이 부여된 객체만 호출 할 수 있다.

 

멤버 함수의 포인터에 대해 알아보자.

사용법을 살펴보자.

 

typedef 형식 (클래스명::*이름)(시그니쳐)

 

와 같이 정의 하면 된다. 일반 함수의 포인터와 다른 점이 있다면, 이름 부분에 이 함수는 클래스 함수를 알려주는 "::" 를 사용 했다는 점 밖에 없다.

나머지 사용은 똑같다.

 

 

클래스의 동적할당.

 

클래스의 동적할당 또한 똑같다. 다만 클래스의 동적 할당의 경우는 보통은 하나의 객체만 동적할당 하는 경우가 많으므로 그 경우만 살펴보자.

사용법은 일반적인 new,delete 의 사용법과 똑같다.   예를 보자.

 

point* pt = new point();

 

위와 같이 사용한다. 일반적인 new와 다른점이 있다면 뒷부분의 () 가 더 있다. 이는 생성자의 사용과 관련있다. 동적 할당을 할 경우 생성자는 new 명령이 실행되면서 생성자가 실행된다. 그래서 저 뒷부분에 생성자에 따라 시그니쳐를 써주면 된다.  해제할때도 똑같이 delete point; 와 같이 사용하면 된다.

여기서 중요한 점은 객체포인터의 경우 생성자는 new 를 실행함과 동시에 실행되고, 소멸자의 경우 delete가 실행되면서 실행된다는 점을 기억해야한다.

'!? > C++' 카테고리의 다른 글

클래스 가상함수  (1) 2012.08.30
클래스 상속과 포함.  (0) 2012.08.28
클래스 1  (0) 2012.08.16
문자열(string)  (1) 2012.08.12
동적메모리 할당  (0) 2012.08.11