operator overloading "operator+()" за конкатенация - C++
Здравейте,
Изпитвам затруднение да открия начин да конкатенирам два char масива от два обекта от един тип.
Масивите са с динамично заделяне на паметта.
Компилаторът ми е VS 2013 и използвам strcpy_s(dist_char,strlen(char)+1,char) и strcat_s(dist_char,strlen(char)+1,char).
//-------------------------------------------
#include"stdafx.h"
#include<iostream>
#include<cstring>
#include<conio.h>
using namespace std;
char buf[50];
class test{
public:
test();
test(char *ch);
~test();
test(const test &obj);
test& operator=(test &obj);
test &operator+(test &obj);
void show(){
cout <<"Show function : "<< str << endl;
}
private:
char *str;
int len;
};
test::test(){
cout << "\nNormal construction \n";
len = 1;
str = new char[1]{'\0'};
cout << "Normal construction : " << str << endl;
}
test::test(char *ch){
cout << "\nConstruction with string\n";
len = strlen(ch);
str = new char[len + 1];
strcpy_s(str, len + 1, ch);
cout << "Construction with string : " << str << endl;
}
test::~test(){
cout << "\nDestruction\n";
delete[] str;
}
test::test(const test&obj){
cout << "\nCopy construction\n";
this->len = obj.len;
delete[] this->str;
str = new char[this->len + 1];
strcpy_s(str, this->len + 1, obj.str);
cout << "Copy construction : " << str << endl;
}
test &test::operator+(test &obj){
delete[] str;
len = strlen(str) + strlen(obj.str)+1;
str = new char[len];
strcat_s(str, len + 1, obj.str);
return *this;
}
test &test::operator=(test &obj){
if (this->len < obj.len){
delete[] this->str;
this->len = obj.len;
str = new char[len+1];
}
strcpy_s(str, this->len + 1, obj.str);
cout << "Construction for getting : " << str << endl;
return *this;
}
int main(){
test A, B("Ime");
A.show();
B.show();
test C(B);
C.show();
test D("Familia");
D.show();
B = D;
B.show();
A + B;
A.show();
_getch();
return 0;
}
//---------------------------------------------
Грешката , която ми генерира е : Expression: (L"String is not null terminated" && 0)
Някой би ли ми дал упътване , как да реша проблема?
Благодаря предварително.
Благодаря за отговора и за градивните забележки.
Самоук съм в тази област и най-вероятно заради това имам толкова пропуски.
Използвам strcat_s и strcpy_s защото компилатора ми генерира постоянно грешка : _CRT_SECURE_NO_WARNINGS, след отговора се порових из нета и открих как да променя компилатора да не я генерира и да ми компилира правилно strcat и strcpy ,но се получава само за текущият проект.
Четейки от един учебник стигнах до тази задача където се използва rule of three и strcpy() , strcat().
Благодаря още веднъж за отговора .