У меня есть классы форм, и в базовом классе у меня есть перегрузки постфиксных и префиксных операторов как чисто виртуальных.
class Shape
{
public:
virtual Shape& operator ++()=0;
virtual shared_ptr<Shape> operator++(int)=0;
virtual void showPos()const =0;
};
class Circle : public Shape
{
public:
virtual Shape& operator ++() override;
virtual shared_ptr<Shape> operator ++(int) override;
virtual void showPos()const override;
private:
int x=0,y=0;
};
Нет проблем с перегрузками префиксных операторов.В postfix мне нужно вернуть временную переменную, но я не могу создать экземпляр абстрактного базового класса, поэтому я решил использовать shared_ptr в качестве интеллектуального указателя.
void
Circle::showPos()const{
cout << "X:"<< x <<", Y:"<<y <<endl;
return;
}
Shape&
Circle::operator ++() {
++x;
++y;
return *this;
}
shared_ptr<Shape>
Circle::operator ++(int) {
shared_ptr<Shape> temp (Circle(*this));
++x;
++y;
return temp;
}
int main()
{
Circle myCircle;
myCircle.showPos(); //must be | X:0, Y:0
(myCircle++)->showPos();//must be | X:0, Y:0 (now x=1,y=1)
(myCircle++)->showPos(); //must be | X:1, Y:1 (now x=2,y=2)
return 0;
}
Реализация находится в том же файле и, как указано выше.И ошибка:
main.cpp:38:40: error: no matching function for call to
'std::shared_ptr<Shape>::shared_ptr(Circle)'
shared_ptr<Shape> temp (Circle(*this));
Как мне использовать shared_ptr?