Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.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++_Visual C++_C++17 - Fatal编程技术网

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++重载运算符”有许多结果