C++ 생성자 질문입니다.
글쓴이: kknd345 / 작성시간: 월, 2005/05/09 - 1:21오후
#include <iostream.h>
#include <string.h>
class Str{
private:
char * p_str;
public:
Str(){
p_str=NULL;
}
Str( char* s)
{
p_str=new char[strlen(s)+1];
strcpy(p_str,s);
}
Str( const Str& CStr)
{
p_str=new char[ strlen( CStr.getstr() )+1];
strcpy(p_str, CStr.getstr() );
}
char* getstr()
{
return p_str;
}
};
int main()
{
Str a1;
Str a2("haha");
Str a3( a2 );
//cout << a1.getstr() << endl;
cout << a2.getstr() << endl;
cout << a3.getstr() << endl;
return 0;
}
Quote:
haha.cpp(22) : error C2662: 'getstr' : cannot convert 'this' pointer from 'const class Str' to 'class Str &'
Conversion loses qualifiers
haha.cpp(23) : error C2662: 'getstr' : cannot convert 'this' pointer from 'const class Str' to 'class Str &'
Conversion loses qualifiers
이런 에러가 납니다. 그래서 CStr.p_str 이렇게 고치니깐 되기는 되는데.... 왜 저렇게 고쳐야 되나요?
그리고 CStr의 멤버 데이터(private)에 이렇게 접근이 왜 가능한건가요?
Forums:


1. const객체의 non-const 멤버함수를 호출할때 발생하는 문제
1. const객체의 non-const 멤버함수를 호출할때 발생하는 문제입니다.
char* getstr() const {}로 바꾸거나 아님 2의 방법 사용
2. 동일한 클래스에 속하는 타입의 인스턴스를 멤버함수의 인자로 받을 경우 private 멤버변수를 접근할 수 있습니다.
그래서 copy constructor, assignment operator 에서 private변수를 곧바로 access하는것을 흔히(일반 멤버 함수에도 동일하게 적용) 볼 수 있습니다.
Life rushes on, we are distracted
댓글 달기