c++ 오버로딩 질문
글쓴이: parkon / 작성시간: 토, 2012/11/17 - 3:28오전
안녕하세요,
기초가 약하다 보니 많이 막히는 군요.
예를 들어
double foo (int& n);
인수인 정수 n이 실행때 업데이트가 되죠.
근데 때때로 업데이트 된 인수의 값은 별로 관심이 없고
return 값에만 관심이 있을 때가 있습니다.
즉
double foo (int n);
이 둘의 차이는 아래 경우는 double x = foo(3); 으로 부를 수 있지만
첫번째 경우는 꼭
{ int n = 3; double x = foo(n); }
그래서 시도해 본게
double foo (int& n); double foo (int n) { int n1 = n; return foo(n1); }
물론 double foo (int n) 이 녀석을 double foo1 (int n) 이런 식으로 이름을 살짝 바꾸면
바로 해결되는 문제긴 하지만,
가독성도 별로고 왠지 마음에 들지 않아서요.
뭔가 쉽고 뾰족한 방법이 있을까요 ?
Forums:
double foo (const int&
double foo (const int& n);
c++에서는 const가 중요합니다. 쓸 수 있는 모든 곳에 최대한 const를 붙인다고 생각하세요.
foo가 하는 일에 따라서는 const를 붙일 수 없을 수도 있습니다만, 그런 경우에는 한 번 더 생각해보세요.
정말 const 없이 레퍼런스로 받아야하는지.
부연설명하자면... const int& 는
부연설명하자면...
const int& 는 r-value와 l-value를 모두 받을 수 있습니다.
고로 foo(1) 이나 int x = 1; foo(x) 모두 foo(const int&) 를 호출하게됩니다.
자세한 설명에 감사드립니다. 덕분에 잘
자세한 설명에 감사드립니다.
덕분에 잘 해결되었습니다... ^^
해결이 되셨나요?
질문글을 읽어보면 foo라는 함수는 n이라는 변수를 업데이트 한다 라고 하셨는데
const int & n 이라고 정의를 해버리시면 foo라는 함수에서 수정이 안될텐데요?
제가 원한건 foo(int), foo(int&) 이
제가 원한건 foo(int), foo(int&) 이 두 함수를 오버로딩해서
foo(1)을 부르면 foo(int)가, n=1; foo(n)을 부르면 foo(int&)가 호출되게 하는 것이었는데
이대로는 컴파일 에러가 생기고, 대신, 예를 들어,
이렇게 하면 원하는 대로 잘 되더군요.
즉,
이렇게 나옵니다.
댓글 달기