C++ 如何创建运算符重载?
我有下面这样的代码,我需要为此类对象编写一个重载加法运算符的全局函数,以便生成的对象表示由“+”符号分隔的两个字符串的串联。有人能帮我吗C++ 如何创建运算符重载?,c++,visual-c++,c++17,C++,Visual C++,C++17,我有下面这样的代码,我需要为此类对象编写一个重载加法运算符的全局函数,以便生成的对象表示由“+”符号分隔的两个字符串的串联。有人能帮我吗 class A { char* str; // ... }; 这样的操作符应该可以访问类的内容,并创建它返回的类a的新实例。假设没有公共接口来访问str这样的操作符必须是一个具有类似于下面签名的友元函数 class A { char* str; // ... friend A operator+ (const A&a
class A {
char* str;
// ...
};
这样的操作符应该可以访问类的内容,并创建它返回的类a的新实例。假设没有公共接口来访问
str
这样的操作符必须是一个具有类似于下面签名的友元函数
class A {
char* str;
// ...
friend A operator+ (const A& arg1, const A& arg2)
{
A temp{arg1}; // assuming that A have a copy constructor
// perform concatenation of temp and arg2 here
return temp;
}
};
试着这样做:
A类
{
char*str;
// ...
公众:
A(const char*s=nullptr):str(nullptr){
若有(s){
str=新字符[strlen(s)+1]);
strcpy(str,s);
}
}
A(const A&src):A(src.str){}
A(A&&src):str(src.str){src.str=nullptr;}
~A(){delete[]str;}
A运算符=(A右侧){
临时{std::move(rhs)};
标准:交换(str,temp.str);
归还*这个;
}
友元A运算符+(常数A和arg1,常数A和arg2)
{
临时工;
temp.str=新字符[strlen(arg1.str)+1+strlen(arg2.str)+1];
sprintf(temp.str、“%s+%s”、arg1.str、arg2.str);
返回温度;
}
};
也就是说,您确实应该使用std::string
而不是char*
:
A类
{
std::字符串str;
// ...
公众:
(const std::string&s=“”):str(s){}
友元A运算符+(常数A和arg1,常数A和arg2)
{
返回一个{arg1.str+“+”+arg2.str};
}
};
你读过了吗?然后尝试为您的类实现operator+
。您是先搜索internet的吗?“C++重载运算符”有许多结果