强制存在非类函数?

时间:2016-05-30 17:37:34

标签: c++ inheritance

假设我有一个我称之为MyString的课程。我希望它是一个看起来像这样的抽象类:

class MyString{
  virtual MyString* operator+(char* other) = 0;
  virtual MyString* operator+(MyString* other) = 0;
};

operator+仅用作连接运算符。我的问题是我如何强制这样的另一个运营商:

MyString* operator+(char* first, MyString* other) = 0;

由派生自此类的类实现。

请注意,此函数通常必须在类之外。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

首先,C ++不是C,通常会避免使用指针。你想要这个:

class MyString{
  virtual MyString* operator+(char* other) = 0;
  virtual MyString* operator+(MyString& other) = 0;
};

其次,你忘记了constpublic,所以你真的想要这个:

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 *作为返回类型。