我有一门抽象课
class Abs{
//...
public:
virtual Abs& operator--() = 0;
virtual void print() = 0;
};
和两个子类
class Sub1: public Abs{
//...
public:
Abs& operator--() {return *this} //this is just to prevent
//Sub1 to become an abstract class
void print() {cout<<"Sub1"<<endl;}
};
class Sub2: public Abs{
//...
public:
Abs& operator--() {...} //here is an issue
void print() {cout<<"Sub2"<<endl;}
};
是否有可能在Sub2中重载运算符-以便在主函数ptr中现在指向类型为Sub1的对象?
int main()
{
Abs* ptr;
Sub2 sub2;
ptr=&sub2;
ptr->print(); //this should print "Sub2"
--(*ptr);
ptr->print(); //this should print "Sub1"
return 0;
}
首先,您的要求很尴尬,真正的答案是:重新考虑您要做什么。
基本上,您要提供的是一种更改成员函数的方法,this
以便使其指向另一个对象(因为您不能更改对象的类型)。这是不可能的。
一种更合理的解决方案是避免直接使用多态性,并让尖的对象包含一个指向Sub1
或的字段Sub2
。然后,使该指针对象将调用直接指向该字段。这样,您可以更改正在使用的有效类型,而不会遇到语言限制。请注意,指向的对象当然不是Abs
,而是其他一些类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句