#include <iostream>
using namespace std;
class MyString
{
public:
MyString(const char* str)
{
for(int i = 0; i < 256; i++)
{
this->str[i] = '\0';
}
for(int i = 0; i < 256; i++)
{
if(str[i] == '\0')
{
len = i;
break;
}
this->str[i] = str[i];
}
}
void operator+=(const char* str)
{
int idx = 0;
for(int i = len; i < 256; i++)
{
if(str[idx] == '\0')
{
len = i;
break;
}
this->str[i] = str[idx];
idx++;
}
}
friend ostream& operator<<(ostream& os, const MyString& myStr)
{
for(int i = 0; i < myStr.len; i++)
{
os << myStr.str[i];
}
os << endl;
return os;
}
int myStrLen()
{
return len;
}
private:
char str[256];
int len;
};
int main()
{
MyString str1 = "ABC";
cout << str1;
cout << str1.myStrLen() << endl;
str1 += "DEF";
cout << str1;
cout << str1.myStrLen();
return 0;
}
1. operator<<의 반환 타입과 위치
- operator는 멤버 함수가 아닌 전역 함수로 정의해야 한다. 이는 cout과 같은 출력 스트림에 클래스 객체를 넣어 출력하는 기능이 필요하기 때문이다.
- 반환 타입은 ostreama&으로 해서 출력 후에도 스트림 객체를 반환하도록 해야한다.
- 여기에 friend 선언을 통해 MyString 클래스 내부에 접근할 수 있도록 해줘야 한다.
'Study > C++' 카테고리의 다른 글
Wrapper Class (0) | 2024.10.20 |
---|---|
Smart Pointer (0) | 2024.10.20 |
[C++] Header File (0) | 2023.10.22 |
[C++] Exception (0) | 2023.10.15 |
[C++] Template (0) | 2023.10.15 |