我自己寫字符串類。我重載+運算符。它的工作正常,但後來我試圖eguate cstr = str +pop
,它什麼也沒做。 `你可以在main()函數中看到我的錯誤。編譯器不會給出任何錯誤。重載運算符+。字符串類
#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;
class S {
public:
S();
S(const char *str);
S(const S &s);
~S() { delete []string;}
S &operator =(const S &s);
int lenght() const {return l ;}
char* strS() const {return string;}
friend ostream &operator <<(ostream &, const S &first) {cout<<first.string;}
friend S operator+ (const S& first, const S& second);
private:
char *string;
int l;
};
int main(){
S pop("Q6");
S str("M5");
S cstr = str +pop; // works correct
cout<<str;
str = str + pop;
cout<<str ; // doesnt work, it doesnt write in terminal
return 0;
}
S::S()
{
l = 0;
string = new char[1];
string[0]='\0';
}
S::S(const char *str)
{
l = strlen(str);
string = new char[l+1];
memcpy(string, str, l+1);
}
S::S(const S &s)
{
l = s.l;
string = new char[l+1];
memcpy(string,s.string,l+1);
}
S &S::operator=(const S &s)
{
if (this != &s)
{
delete []string;
string = new char[s.l+1];
memcpy(string,s.string,s.l+1);
return *this;
}
return *this;
}
S operator +(const S& first, const S& second)
{
S temp;
temp.string = strcat(first.strS(),second.strS());
temp.l = first.lenght() + second.lenght();
return temp;
}
我很期待您的幫助。
如果'new char [temp.l + 1]'失敗,您的解決方案將會有未定義的行爲。像這樣在一個字符串中亂七八糟是解決問題的肯定祕訣。 (在這種情況下,我會偶爾定義一個私有的無操作構造函數,它可以用來創建臨時文件,但這很少有必要) –
@JamesKanze同意這就是爲什麼我添加了最後一句 - 建議使用copy-並交換成語,並關心異常。 – PiotrNycz