Тема: Конструктор копіювання не працює, свій клас string, конкатенація.
Пишу свій клас string за уроками на ютубі. Назвав я його "nyzka", а його розмір - то "sz". Нехай мене за це вибачать.
Проблема полягає у тому, що наприкінці виконання методу перевантаження оператора '+'
компілятор мав би перейти у конструктор копіювання. Проте цього не відбувається,
а компілятор переходить одразу у деструктор.
Я вже задовбався гіпнотизувати браузер у пошуках вирішення. Я не можу продовжити своє навчання через це.
Якби я сумнівався у правильності свого коду я б сюди не написав. Допоможііть!
Проблема у виконанні операції test = text_1 + text_2;
#include<iostream>
using namespace std;
//// CREATING OWN CLASS LIKE "STRING" NAMED "NYZKA" ////
class nyzka
{
char* str;
int sz;
public:
// -V- default constructor
nyzka()
{
this->str = nullptr;
this->sz = 0;
}
// -V- constructor
nyzka(const char* str)
{
this->sz = strlen(str);
this->str = new char[sz+1];
for (int i = 0; i < sz; i++) { this->str[i] = str[i]; }
this->str[sz] = '\0';
}
// -V- copying constructor
nyzka(const nyzka& other)
{
this->sz = other.sz;
this->str = new char[sz + 1];
for (int i = 0; i < sz; i++) { this->str[i] = other.str[i]; }
this->str[sz] = '\0';
}
// -V- + operator overload
nyzka& operator + (const nyzka& other)
{
nyzka newstr;
newstr.sz = strlen(this->str) + strlen(other.str);
newstr.str = new char[newstr.sz + 1];
int i;
for (i = 0; i < strlen(this->str); i++)
{
newstr.str[i] = this->str[i];
}
for (int j = 0; i < newstr.sz; j++, i++)
{
newstr.str[i] = other.str[j];
}
newstr.str[newstr.sz] = '\0';
return newstr;
}
// -V- = operator overload
nyzka& operator = (nyzka& other)
{
if(this->str!=nullptr)
delete[] this->str;
this->sz = other.sz;
this->str = new char[sz + 1];
for (int i = 0; i < sz; i++) { this->str[i] = other.str[i]; }
this->str[sz] = '\0';
return *this;
}
// -V- [i] operator constructor
void display()
{
cout << endl << endl << str << endl << "size = " << sz << endl;
}
// -V- destructor
~nyzka()
{
delete[] this->str;
}
};
int main() //::::
{
nyzka text_1 = "Snake";
text_1.display();
nyzka text_2 = "Kytska";
text_2.display();
nyzka test;
test = text_1 + text_2;
test.display();
}