假设我有一个我称之为MyString
的课程。我希望它是一个看起来像这样的抽象类:
class MyString{
virtual MyString* operator+(char* other) = 0;
virtual MyString* operator+(MyString* other) = 0;
};
operator+
仅用作连接运算符。我的问题是我如何强制这样的另一个运营商:
MyString* operator+(char* first, MyString* other) = 0;
由派生自此类的类实现。
请注意,此函数通常必须在类之外。
有没有办法做到这一点?
答案 0 :(得分:1)
首先,C ++不是C,通常会避免使用指针。你想要这个:
class MyString{
virtual MyString* operator+(char* other) = 0;
virtual MyString* operator+(MyString& other) = 0;
};
其次,你忘记了const
和public
,所以你真的想要这个:
class MyString{
public:
virtual MyString* operator+(const char* other) const = 0;
virtual MyString* operator+(const MyString& other) const = 0;
};
第三,对于你的任务,如果我理解正确,你需要:
class MyString{
public:
virtual MyString* operator+(const char* other) const = 0;
virtual MyString* operator+(const MyString& other) const = 0;
virtual MyString* append_to(const char* other) const = 0; // x.append_to(y) is y+x
};
inline MyString* operator+(const char* x, const MyString& y) {return y.append_to(x);}
PS:将MyString更改为MyString *作为返回类型。