如何创建运算符重载?
Posted
技术标签:
【中文标题】如何创建运算符重载?【英文标题】:How to create operator overload? 【发布时间】:2020-07-01 22:34:01 【问题描述】:我有如下代码,我需要编写一个全局函数,重载此类对象的加法运算符,以便生成的对象表示由“+”号分隔的两个字符串的串联。有人可以帮我吗?
class A
char* str;
// ...
;
【问题讨论】:
你读过***.com/questions/4421706/…吗?然后尝试为您的班级实施operator+
。
你先上网搜索了吗? “C++重载运算符”有很多结果
【参考方案1】:
这样的操作符应该可以访问类的内容并创建一个它返回的类 A 的新实例。假设没有访问str
的公共接口,这样的操作员必须是一个朋友功能,其签名类似于下面的一个
class A
char* str;
// ...
friend A operator+ (const A& arg1, const A& arg2)
A temparg1; // assuming that A have a copy constructor
// perform concatenation of temp and arg2 here
return temp;
;
【讨论】:
【参考方案2】:试试这样的:
class A
char* str;
// ...
public:
A(const char *s = nullptr) : str(nullptr)
if (s)
str = new char[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& operator= (A rhs)
A tempstd::move(rhs);
std::swap(str, temp.str);
return *this;
friend A operator+ (const A& arg1, const A& arg2)
A temp;
temp.str = new char[strlen(arg1.str)+1+strlen(arg2.str)+1];
sprintf(temp.str, "%s+%s", arg1.str, arg2.str);
return temp;
;
话虽如此,你真的应该使用std::string
而不是char*
:
class A
std::string str;
// ...
public:
A(const std::string &s = "") : str(s)
friend A operator+ (const A& arg1, const A& arg2)
return Aarg1.str + "+" + arg2.str;
;
【讨论】:
以上是关于如何创建运算符重载?的主要内容,如果未能解决你的问题,请参考以下文章