#include <iostream>
#include <string.h>
using namespace std;

    class String
    {
        char *m_str;
        size_t m_len, m_alloced;
    public:
        String(const char *str = "")
        {
            m_len = strlen(str);
            m_alloced = m_len + 1;
            m_str = (char *)malloc(m_alloced);
            strcpy(m_str, str);
        }
        String(const String &other)
        {
            m_len = other.m_len;
            m_alloced = m_len + 1;
            m_str = (char *)malloc(m_alloced);
            strcpy(m_str, other.m_str);
        }
        String &operator =(const String &rhs)
        {
            if (m_alloced < rhs.m_len + 1)
            {
                m_alloced = rhs.m_len + 1;
                m_str = (char *)realloc(m_str, m_alloced);
            }

            m_len = rhs.m_len;
            strcpy(m_str, rhs.m_str);
            return *this;
        }
        const char *get() const
        {
        	return m_str;
        }
    };

int main()
{
	String str1 = "asdf";
	String str2 = str1;
	String str3 = "12";
	str3 = str1;

	cout << str1.get() << endl << str2.get() << endl << str3.get() << endl;
}

