我有抽象类:

#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。单个隐式转换序列中不允许进行两次此类用户定义的转换。

07-24 09:44