Предположим, у меня есть класс, который я называю MyString
. И я хочу, чтобы это было абстрактным классом, который выглядит примерно так:Форсировать неклассовые функции для существования?
class MyString{
virtual MyString* operator+(char* other) = 0;
virtual MyString* operator+(MyString* other) = 0;
};
operator+
просто используется в качестве оператора конкатенации. Мой вопрос заключается в том, как заставить другого оператора следующим образом:
MyString* operator+(char* first, MyString* other) = 0;
Выполняется классом, который происходит от этого класса.
Обратите внимание, что эта функция обычно должна находиться вне класса.
Есть ли способ сделать это?
Как это работает? Вы не можете делать виртуальную отправку на бесплатной функции. Поэтому вам нужно будет сделать 'append' (чистую) функцию' virtual' member и заставить ее таким образом. Затем вы можете вызвать 'append' в свой' operator + ', который определяется только на верхнем уровне иерархии. – BoBTFish
Кроме того, вы действительно хотите использовать '+' для 'append'? Подумайте о семантике. Например, ожидание состоит в том, что '+' обычно является коммутативным: '1 + 2 == 2 + 1 == 3', но' 'a" + "b"! = "B" + "a" '. – BoBTFish