Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何重载运算符+;在c++;能够写c_str=";smth“+;c_街;_C++_Char_Operator Overloading_Operators_C Strings - Fatal编程技术网

C++ 如何重载运算符+;在c++;能够写c_str=";smth“+;c_街;

C++ 如何重载运算符+;在c++;能够写c_str=";smth“+;c_街;,c++,char,operator-overloading,operators,c-strings,C++,Char,Operator Overloading,Operators,C Strings,我想上一节CMyString课。它表示包含字符数组的对象。我需要重载运算符才能对这些对象求和。这是这节课 CMyString::CMyString() { i_长度=0; n_string=新字符[1]; n_字符串[0]='\0'; } CMyString::CMyString(常量字符*cChar) { i_长度=等源长度(cChar); n_string=新字符[i_长度]; 对于(int ii=0;iii_length=i_length+pcOther.i_length; c_res->

我想上一节CMyString课。它表示包含字符数组的对象。我需要重载运算符才能对这些对象求和。这是这节课

CMyString::CMyString()
{
i_长度=0;
n_string=新字符[1];
n_字符串[0]='\0';
}
CMyString::CMyString(常量字符*cChar)
{
i_长度=等源长度(cChar);
n_string=新字符[i_长度];
对于(int ii=0;iin_字符串=新字符[新闻大小];
i_长度=新闻大小;
返回true;
}
//boolcmystring::bResize(int newSize)
int CMyString::Isourcellength(常量字符*cChar)
{
int i_source_length=0;
while(cChar[i_source_length]!='\0')
i_source_length++;
返回i_源长度;
}
//int CMyString::Isourcellength(常量字符*cChar)
CMyString&CMyString::operator=(常量CMyString&pcOther)
{
if(this!=&pcOther)//防范a=a;
{
删除[]n_string;//释放旧内存,然后分配新内存
i_长度=pcOther.i_长度;
n_string=新字符[i_长度];
vCopyFrom(pcOther);
}
return*this;//返回对自身的引用以允许a=b=c;
}
//CMyString&CMyString::operator=(常量CMyString&pcOther)
void cmysting::operator=(常量字符*cChar)
{
如果(i_长度!=0)
删除[]n_字符串;
i_length=Isourcellength(cChar);//计算初始值的长度
n_string=new char[i_length];//分配存储
for(int ii=0;iii_length=0;
c_res->n_string=NULL;
}
c_res->i_length=i_length+pcOther.i_length;
c_res->n_string=新字符[c_res->i_长度];
int ii;
对于(ii=0;iin_string[ii]=n_string[ii];
对于(int ij=0;ijn_string[ii]=pcOther.n_string[ij];
返回*c_res;
}
CMyString::运算符字符*()
{
返回n_字符串;
}
//CMyString和CMyString::operator+(常量CMyString和pcOther)
CMyString::运算符char*()常量
{
返回n_字符串;
}

我应该怎么做才能写出c_str=“smth”+c_str??这是我的加号。没有运算符“+”与此操作数匹配。操作数类型有:const char[4]和CMyString?

有关详细信息,请访问此页

类CMyString
{
私人:
字符串str;
公众:
CMyString(字符串_str){str=_str;}
友元CMyString运算符+(字符串值,CMyString Str);
字符串GetStr(){return str;};
};
CMyString运算符+(字符串值,CMyString Str)
{
返回CMyString(value+Str.Str);
}
int main()
{
CMyString试验(“试验”);
test=“smth”+测试;

您是否尝试过为这些类型创建重载?即
const CMyString&operator+(const char[],const CMyString&);
?请提供和完整的错误消息。编译器告诉我它与此运算符的参数匹配:(你知道有代码> STD::String ,对吗?编写你自己的字符串类不是一个简单的练习,经过几年的C++,我仍然认为这是一个重大的挑战。”
class CMyString
{
private:
    string str;

public:
    CMyString(string _str) { str = _str; }

    friend CMyString operator+(string value, CMyString Str);
    string GetStr() {return str;};
};

CMyString operator+(string value, CMyString Str)
{
    return CMyString(value + Str.str);
}

int main()
{
    CMyString test("Test");

    test = "smth" + test;
    cout << test.GetStr();
    return 0;
}