我有抽象类:
#include <string>
using namespace std;
class AString
{
public:
virtual ~AString() {}
virtual const string& GetName() const = 0;
virtual const string& GetValue() const = 0;
virtual const int GetSize() const = 0;
};
和派生类。我尝试在此类中重载二进制+:
class SymbString : public AString
{
private:
string name;
string val;
public:
SymbString() {}
SymbString(string _name) : name(_name) {}
SymbString(string _name, string _val) : name(_name), val(_val) {}
const string& GetName() const { return name; }
const string& GetValue() const { return val; }
const int GetSize() const { return val.size (); }
const string& SetValue(string value)
{
val = value;
return val;
}
SymbString operator + (const SymbString &str1, const SymbString &str2)
{
}
};
但是看到错误:SymbString运算符+(const SymbString&str1,const SymbString&str2)必须采用零或一个参数
怎么了?
谢谢。
最佳答案
您需要将其放入SymbString
的封闭 namespace 中。不是成员(member)。
或作为成员,但仅指定正确的参数。但后来"Hello" + symb
将不再起作用,因为左侧不是SymbString
。因此,建议将其作为非成员写入SymbString
的命名空间中。
请注意,要能够说出symb + "Hello"
或以其他方式说出乃至编写SymbString s = "Hello";
,您还需要接受char const*
作为构造函数参数。否则,char const*
不会隐式转换为SymbString
,因为这将需要先转换为std::string
,然后再从其转换为SymbString
。单个隐式转换序列中不允许进行两次此类用户定义的转换。