[C++] 함수 객체와 관련된 질문입니다.

GunSmoke의 이미지

늦게나마 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로 선언되어 있습니다.

kslee80의 이미지

오히려 꺼꾸로여야 의미상 맞다고 생각이 드네요..

struct 는 단지 여러 데이터를 보관하는 틀을 만들기 위한 용도로..
그리고 operator overloading 같은 기능은 class 로 만들어야 맞다고 생각합니다.

개인적인 생각으로는,
C++ 에서 struct 로 class 와 같은 효과가 나는 이유가
컴파일러들이 class 의 구현을 struct 구현을 응용하면서 생긴 side-effect 라고 생각합니다;;

익명사용자의 이미지

신경쓰지 마세요.
뭐 당연할 것까지야 프로그래머 취향이지.

deisys의 이미지

struct 는 기본이 public, class는 기본이 private 이라는 차이 외에는 완전히 동일한걸로 알고 있습니다.

--
Deisys, in the middle of the world, being with you . . . . . .

kyagrd의 이미지

기능상 기본 접근 권한 이외에는 차이가 없으니 혼자 일하실 때는 편한 대로 쓰면 됩니다.

여러 명이 같이 쓸 때는 언제 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/

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.