C++ 如何使用虚拟后缀操作符解决切片问题?

C++ 如何使用虚拟后缀操作符解决切片问题?,c++,abstract-class,slice,increment,virtual-functions,C++,Abstract Class,Slice,Increment,Virtual Functions,我有一个抽象的基类,由于家庭作业,我必须实现纯虚拟的post和pre-increment操作符 virtual Base & operator ++ () = 0; virtual Base operator ++ (int ignore) = 0; 有一个切片问题。我应该如何实现派生类定义。模板不是这个家庭作业的解决方案,因为它不适合整个家庭作业。事实上,在派生类中,此后缀增量运算符将导致切片对象 virtual Base & operator ++ () = 0; virt

我有一个抽象的基类,由于家庭作业,我必须实现纯虚拟的post和pre-increment操作符

virtual Base & operator ++ () = 0;
virtual Base operator ++ (int ignore) = 0;

有一个切片问题。我应该如何实现派生类定义。模板不是这个家庭作业的解决方案,因为它不适合整个家庭作业。

事实上,在派生类中,此后缀增量运算符将导致切片对象

virtual Base & operator ++ () = 0;
virtual Base operator ++ (int ignore) = 0;
struct Base
{
    virtual Base& operator++()   = 0;
    virtual Base operator++(int) = 0;
};

struct Derived : Base
{
    void inc();
    virtual Base& operator++ ()  { inc(); return *this; }                   // no slicing
    virtual Base operator++(int) { auto self = *this; inc(); return self; } // slicing
};
我应该如何实现派生类定义

我的观点是,虚拟运营商是一个危险信号,也是一个设计缺陷。尽可能避免

如果“因为家庭作业”你被它困住了,你可以调整它的返回类型并制作一个新的


你说“有一个切片问题”是什么意思?你能详细说明一下吗?有人负责这个作业,不是吗?告诉他们他们的任务有基本问题在这个操作符上,我更改派生类的成员。但我无法访问它。我试图使用指针,但出现了切片问题。不过,您可以将相应的成员变量放入bass类中。我不知道在什么情况下是有意义的,但好吧。最好的办法是提供一份报告,说明到目前为止您做了哪些尝试,以及问题发生的地方。
void f(Derived&);
Derived d;
f(*d++); // this is *weird*