[C++] 함수 객체와 관련된 질문입니다.
글쓴이: GunSmoke / 작성시간: 목, 2006/11/30 - 10:14오전
늦게나마 C++을 공부하기 위해 '혼자 공부하는 C++'라는 책을 읽고 있는데요. 함수 객체와 관련된 설명으로 다음의 예제를 보여주고 있습니다.
#include <iostream> #include <vector> #include <algorithm> using namespace std; struct print{ void operator()(int a) const{ printf("%d\n", a); } }; void main() { int ari[]={2, 8, 5, 1, 9}; vector<int> vi(&ari[0], &ari[5]); sort(vi.begin(), vi.end()); for_each(vi.begin, vi.end(), printf()); }
그리고 다음과 같은 설명을 덧붙이고 있죠.
Quote:
print클래스는 () 연산자를 정수값 하나를 인수로 받아 그 값을 출력하도록 오버로딩하고 있다. class가 아니고 struct로 선언했을까 물으면 '당연하지'라고 단호하게 대답할 수 있어야 한다.
...
이 점이 궁금한데요. 꼭 struct여야만 하는 것은 아니지 않습니까? class로 선언해서 연산자를 public으로 선언해도 같은 결과를 얻을 수 있지 않을까요?
* 실제로 이 책에서 모든 함수 객체는 struct로 선언되어 있습니다.
Forums:
오히려 꺼꾸로여야
오히려 꺼꾸로여야 의미상 맞다고 생각이 드네요..
struct 는 단지 여러 데이터를 보관하는 틀을 만들기 위한 용도로..
그리고 operator overloading 같은 기능은 class 로 만들어야 맞다고 생각합니다.
개인적인 생각으로는,
C++ 에서 struct 로 class 와 같은 효과가 나는 이유가
컴파일러들이 class 의 구현을 struct 구현을 응용하면서 생긴 side-effect 라고 생각합니다;;
신경쓰지 마세요. 뭐
신경쓰지 마세요.
뭐 당연할 것까지야 프로그래머 취향이지.
struct와 class의 차이
struct 는 기본이 public, class는 기본이 private 이라는 차이 외에는 완전히 동일한걸로 알고 있습니다.
--
Deisys, in the middle of the world, being with you . . . . . .
--
http://www.deisys.net
말씀하신 대로입니다.
기능상 기본 접근 권한 이외에는 차이가 없으니 혼자 일하실 때는 편한 대로 쓰면 됩니다.
여러 명이 같이 쓸 때는 언제 struct 를 쓰고 class 를 쓰는지 정해 놓으면 서로 코드를 좀더 알아보기 편하겠죠.
보통은 멤버함수가 없거나 아니면 있더라도 생성자 소멸자만 있다거나 하는 간단하고 모든 접근 권한이 거의 public 인, 거의 C 의 struct 와 비슷하게 쓰는 건 struct 로 하고 좀더 복잡한 건 class 로 이름 붙이고 그러는 것 같던데요.
--
There's nothing so practical as a good theory.
- Kurt Lewin
--
There's nothing so practical as a good theory. - Kurt Lewin
"하스켈로 배우는 프로그래밍" http://pl.pusan.ac.kr/~haskell/
댓글 달기