123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- #define _CRT_SECURE_NO_WARNINGS
- #include <string>
- #include "myString.h"
- // Îïðåäåëåíèå êîíñòðóêòîðà.
- MyString::MyString(const char* Str)
- {
- if (Str != nullptr)
- {
- m_pStr = new char[strlen(Str) + 1];
- strcpy_s(m_pStr, strlen(Str) + 1, Str);
- }
- else { m_pStr = nullptr; }
-
- }
- MyString::MyString(const char* Str, int size)
- {
- if (Str != nullptr)
- {
- m_pStr = new char[size];
- strcpy_s(m_pStr, strlen(Str) + 1, Str);
- }
- else { m_pStr = nullptr; }
- }
- //ìåòîä , êîòîðûé îáåñïå÷èò äîñòóï ê õðàíÿùåéñÿ ñòðîêå
- const char* MyString::GetString() const
- {
- return m_pStr;
- }
- //êîíñòðóêòîð êîïèðîâàíèÿ
- MyString::MyString(const MyString& Other)
- {
- //îáà îáúåêòà ñóùåñòâóþò, îäèí è òîò-æå îáúåêò????
- //delete[] m_pStr;
- m_pStr = new char[strlen(Other.m_pStr) + 1];
- strcpy_s(m_pStr, strlen(Other.m_pStr) + 1, Other.m_pStr);
- }
- //ïåðåìåùàþùèé êîíñòðóêòîð êîïèðîâàíèÿ
- MyString::MyString(MyString&& Other)
- {
- m_pStr = Other.m_pStr; //ïðîñòî çàáèðàåì äàííûå (ñèàìñêèå)
- Other.m_pStr = nullptr;//ãîâîðèì, ÷òî ó äðóãîãî íåò (òåïåðü âñå îòëè÷íî)
- }
- // Îïðåäåëåíèå äåñòðóêòîðà.
- MyString::~MyString()
- {
- //to_do m_pStr = new char [strlen(Str) + 1];
- delete[] m_pStr;
- m_pStr = nullptr;
- }
- //operator+
- MyString MyString::operator+(const MyString& other) const
- {
- MyString tmp_Str(m_pStr, strlen(m_pStr) + strlen(other.m_pStr) + 1);
- strcat(tmp_Str.m_pStr, other.m_pStr);
-
- return tmp_Str;//ïåðåìåùàþùèé êîíñòðóêòîð
- }
- //îïåðàòîð ïðèñâàèâàíèÿ ïðèíèìàþùèé êëàññ
- MyString& MyString::operator=(const MyString& Other)
- {
- if (&Other != this)
- {
- delete[] m_pStr;//ìîæíî ëè îïòèìèçèðîâàòü?
- m_pStr = new char[strlen(Other.m_pStr) + 1];
- strcpy_s(m_pStr, strlen(Other.m_pStr) + 1, Other.m_pStr);
- }
-
- return *this;
- }
- //operator+=
- MyString& MyString::operator+=(const MyString& other)
- {
- if (&other != nullptr)
- {
- MyString tmp_Str(m_pStr, strlen(m_pStr) + strlen(other.m_pStr) + 1);
- strcat(tmp_Str.m_pStr, other.m_pStr);
-
- delete[] m_pStr;
- m_pStr = tmp_Str.m_pStr; //ïðîñòî çàáèðàåì äàííûå (ñèàìñêèå)
- tmp_Str.m_pStr = nullptr;
- }
- return *this;
- }
- //ïåðåìåùàþùèé îïåðàòîð ïðèñâàèâàíèÿ
- void MyString::operator=(MyString&& Other)
- {
- delete[] m_pStr;
- m_pStr = Other.m_pStr; //ïðîñòî çàáèðàåì äàííûå (ñèàìñêèå)
- Other.m_pStr = nullptr;//ãîâîðèì, ÷òî ó äðóãîãî íåò (òåïåðü âñå îòëè÷íî)
- }
- MyString& MyString::operator=(const char* Str)
- {
- if (Str != nullptr)
- {
- if (strlen(m_pStr) != strlen(Str))
- {
- delete[] m_pStr;
- m_pStr = new char[strlen(Str) + 1];
- }
- strcpy_s(m_pStr, strlen(Str) + 1, Str);
- }
- return *this;
- }
- //ìåòîä, êîòîðûé áóäåò çàìåíÿòü ñòðîêó íà íîâóþ
- void MyString::SetNewString(const char* Str)
- {
- //if (strlen(m_pStr) >= strlen(Str)) {}; íóæíà ëè ïðîâåðêà???
- if (strcmp(m_pStr, Str))
- {
- if (strlen(m_pStr) != strlen(Str))
- {
- delete[] m_pStr;
- m_pStr = new char[strlen(Str) + 1];
- };
-
- strcpy_s(m_pStr, strlen(Str) + 1, Str);
- }
- }
- std::ostream& operator<<(std::ostream& os, const MyString& str)
- {
- os << /*"contents: \"" << */str.m_pStr /*<< "\"" << std::endl*/;
- return os;
- }
- MyString concatenation(const char* Str, ...)
- {
- size_t size = 1;
- for (const char** p = &Str; *(p) != nullptr; p++)
- {
- size +=strlen(*p);
- }
-
- char* tmp_Str = new char [size] {};
- for (const char** p = &Str; *(p) != nullptr; p++)
- {
- tmp_Str = strcat(tmp_Str, *p);
- }
-
- MyString tmp (tmp_Str);
- delete[]tmp_Str;//áåç óòå÷êè ïàìÿòè
- return tmp;//ïåðåìåùàþùèé êîíñòðóêòîð
- }
|