달력

07

« 2018/07 »

  • 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
  •  
  •  
  •  
  •  
2010.04.19 00:28

함수객체 프로그래밍/STL2010.04.19 00:28






요즘엔 이래저래 혼란이라 포스팅을 안하고 있었으나--a

개념파악은 다 한거 같고,

책 찾아 보기 귀찮은 것들만 빠르게 포스팅 하고,

API로 넘어가야 할것 같다.

새벽2 시쯤엔 잘 수 있겠지 머 -_ -;;

잡소린 그만하고,

함수 객체를 사용하는 방법은 여러가지고 존재한다.

1. 전역 함수
2. 클래스 내의 맴버 함수
3. 글래스의 연산자 오버로딩 사용

예제
1. 전역 함수


2. 클래스 내의 맴버 함수

2.2 클래스 내의 인자를 추가적으로 받는 맴버 함수

3. 클래스 내의 연산자 오버로딩


이 부분에 대해서 모호할 수 있는데,
AAA를 임시 객체로 생성하고 ()를 호출,
당연히 ()에 들어 가는 값은 vector의 값이고(이 예제에서는 int형)
for_each의 모든 동작이 끝나면 AAA() 임시 객체를 return,
AAA a가 그 값을 복사 생성자로 받게 된다는 것을 결과를 통해 알 수 있다.

3.2 클래스내에 존재하는 연산자 오버로딩
비슷 하지만 조금 다른 경우도 있다.

이 결과를 보면 복사생성자를 무려 15번이나 들린다는 것을 알 수 있다.
하지만 이것은 coll에 임시객체를 생성해서 값을 저장하고 있는 것이기 때문에 들르는 것이고,
왜 그 횟수가 15번인지까지는 솔직히 잘 모르겠다.
push_back를 한번만 하면 1번 밖에 안들르고,
2번째에 2번 더 들리고,
3번째에 6번 들리게 되던데,,,, 흐음..
어째뜬 그것만 제외한다면, 이전과 비슷하지만,
단지 vector가 가지는 값이 int가 아니라 AAA클래스 객체 라는 것만 빼면,
크게 차이점은 없다.
상황에 따라서 AAA 객체를 vector에 저장해야 하는 상황에서,
operator()를 int가 아닌 AAA& 로 받고 있다는 것을 주의해서 보아야 할 것이다.



함수 객체라는 기능이 매우 뛰어나다고 생각하지만,
잘 쓰지 못한다면 오히려 그것은 독이 될 수 있다고 생각한다.
아직 많이 부족하지만 당분간은 함수 객체를 어떻게 해서든 자주 사용해가는 방향으로 코딩을 해볼까 한다.
물론 operator연산도 마찬가지로,,,,

'프로그래밍 > STL' 카테고리의 다른 글

함수객체  (0) 2010.04.19
algorithm  (0) 2010.04.08
연관 컨테이너 - Set, Map, multiSet, multiMap  (0) 2010.04.08
iterator - 반복자  (0) 2010.04.08
시퀀스 컨테이너 - vector, list, deque  (0) 2010.04.05
용어적 설명.  (0) 2010.04.05
Posted by 안식의후크