这是我的问题的代码:
class ICommon
{
public:
virtual ICommon& operator=(const ICommon & p)const=0;
};
class CSpecial : public ICommon
{
public:
CSpecial& operator=(const CSpecial & cs)const
{
//custom operations
return *this;
}
};
CSpecial obj;
基本上:我希望接口(interface)ICommon强制其后代实现=运算符,但不希望实现中具有任何类型转换。编译器说“无法实例化抽象类。
任何帮助/建议将不胜感激。
最佳答案
为了回应Naveen所说的,CSpecial中定义的operator=()
与ICommon中定义的不兼容,并导致重载而不是覆盖。尽管您可以具有协变返回类型(如上所示),但参数本身不能是协变的。
此外,您已将ICommon::operator=()
定义为const,这似乎违反直觉。在派生类中,已将其设为非常量(如预期的那样),但这又使函数签名进一步不兼容。
Naveen的clone()
想法可能是您最好的选择。否则,您可以将ICommon const引用传递给CSpecial operator=()
,并在内部尝试一些dynamic_cast<>()
魔术,但这听起来很可笑。
祝好运!