C++ 대입연산자 오버로딩 관련 질문입니다.
글쓴이: canuyes / 작성시간: 월, 2013/07/08 - 3:39오후
C++ 대입연산자(=)를 전역함수 기반으로 오버로딩 하려고 합니다.
제가 생각하는 방법대로 하니 자꾸만 오류가 나네요...
#include<iostream>
#include<cstring>
using namespace std;
class String{
private:
char* str;
public:
String(char* temp){
str=new char[strlen(temp)+1];
strcpy(str,temp);
}
~String(){
delete[] str;
}
void print(void){
cout<<str<<endl;
return;
}
friend void operator=(char* temp,String& s);
};
void String::operator=(char* temp,String& s){
temp=new char[strlen(s.str)+1];
strcpy(temp,s.str);
return;
}
int main(void){
system("PAUSE");
return 0;
}main함수에서
String s("Hello");
const char* sz=s;
같은 문장을 사용하고 싶습니다..
어느 부분이 잘못 된것일까요??
Forums:


발상도 잘못되었고 구현도 잘못되었습니다. 그러한
발상도 잘못되었고 구현도 잘못되었습니다.
그러한 대입은 매우 제한적으로 밖에 구현할 수 없으며, 대부분의 경우 원하는 동작이 아닐 것입니다.
혹시 다른 언어를 먼저 공부하셨나요?
C(C++이 아니라 C입니다)를 한번도 공부한적이 없으시다면 포인터를 다루기 전에 C입문서를 한번 정독하시기를 추천합니다.
원하시는 게 맞는 지 모르겠지만 STL의
원하시는 게 맞는 지 모르겠지만
STL의 string클래스의 멤버함수 c_str()이 비슷한 기능을 할 수 있을 거 같습니다.
가령
std::string hello("hello string");
const char *hello_c_str = hello.c_str();
printf("%s\n", hello_c_str);
이런 식의 동작이 가능합니다.
gilgil.net
http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B URL을 참조해 보세요.
class String
{
...
operator const char*() { ... }
};
www.gilgil.net
C 기본 자료형을 두고 이런 표현을 쓰긴
C 기본 자료형을 두고 이런 표현을 쓰긴 넌센스지만
라면... 이때는 sz의 대입연산자가 아니라 복사생성자가 호출되야 할 겁니다.
물론 sz가 객체가 아니니까 그럴일도 없지만 말이죠...
답변들 감사합니다.
답변 진심으로 감사드립니다 gilgil님 답변으로 해결 했습니다.
사실 이 문제는 직접 구현하려 한 것 이라기 보다는
STL을 공부중에 잠시 쉬어가는 코너에 소개되어있던 문제였습니다...ㅠㅠ
굳이 구현을 해보라는 문제가 나와있기에 올려 봤습니다..
좋은 정보 감사합니다.
저도 대입연산자 오버로딩한ㄴ데 왜안되지... 하고있다가 여기 들어와서 깨달았네요.
대입연산자는 전역으로는 안되는구나..ㅜㅜ