[완료]C++ [](첨자 연산자) 연산자 오버로딩 관련해서 질문 좀 드릴께요.

dhckdaks의 이미지

C++에서 간단한 예제하나 해보고 있는 중인데요.

대략 현 상황이 class A, class B를 만들어놨습니다.

그리고 class B안에

private 멤버변수로 A *a[12];

이런 식으로 class A의 포인터 배열을 멤버 변수로 가지고 있습니다.

그래서 한개의 B클래스의 인스턴스에는 A클래스의 포인터가 12개 있고, 생성자에서 메모리 할당을 해줬습니다.

그런데 이게 갯수도 상수개가 존재하고 클래스 개념상 [](첨자 연산자)가 있으면 좋겠다 싶어서

class B의 public 멤버 변수로

A operator[](int _index) const{
if(index의 범위 판단)
return *a[_index];
}

이렇게 연산자 오버로딩을 해줬습니다.

그리고 main에서

B클래스의 인스턴스(b라고 부르겠습니다.)를 동적생성 한 후

[](첨자연산자)를 이용, b의 멤버변수 a에 접근해서

a의 멤버함수를 호출하려고 하는데

이상하게 계속 컴파일러가 [](첨자연산자)를 일반적인 배열의 [](첨자연산자)로 인식을 합니다.

예를 들어서 b[5] <-요놈이 A타입을 리턴하는게 아니라 B타입을 리턴하는걸로 컴파일러가 인식을 합니다.

이게 당연한 결관가요? ㅇ_ㅇ;;

그럼 제가 원하던대로 b[5]를 이용해서 a의 멤버함수를 접근하려면 어떻게 해야 되는지 좀 알려주세요.

부탁드립니다. 꾸벅~

jick의 이미지

흠, 잘 되어야 될 것 같은데요, 코드를 올려주시면 더 확실한 답을 얻으실 수 있습니다.

* 그리고 operator[]의 리턴타입은 아마도 A&가 더 의도에 맞을 것 같은데요...

dhckdaks의 이미지

B클래스 안에서 a의 값들을 자동적으로 채워넣기 때문에 일부러 a에 대한 setter함수도 생성을 하지 않고 getter대신에

[](첨자 연산자)를 이용하는 방식이라 리턴 받은 내용의 값을 변경하지 않고자 하는 의도로 리턴 타입을 A로 했습니다만,

그래도 A&로 하는게 맞는 건가요???

아 그리고 소스코드는 올려보도록 하겠습니다.

그리고 답변 한 번 더 해주시면 감사하겠습니다.꾸벅~

p.s-메인에 보시면 16번째 줄에서 에러가 발생합니다.

댓글 첨부 파일: 
첨부파일 크기
Package icon 10000calender.zip2.88 KB
kaeri17의 이미지

지금 myYear은 Year* 타입이지 Year 타입이 아니죠. [] 연산자를 쓸려면 (*myYear)[어쩌고] 해야 맞죠.

익명 사용자의 이미지

제가 계속 연산자 쪽에만 집중을 하다 보니까 그 부분을 생각을 미쳐 못 했었네요..ㅇㅅㅇ;;
이래서 디버깅 때는 생각을 비우라고 그렇게들....
아무튼 정말 감사합니다.
이제 그 부분은 해결 됏으니까 저는 링크단계 에러를.....(에휴~)처리하러 가보겠습니다.
정말 감사드려요~

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 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>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 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>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 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>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.