본문 바로가기

Study/C++

String 클래스의 구조와 friend 선언을 통한 연산자 오버로딩의 출력

#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