我一直在尝试使用VS2013继承C ++中的运算符。我有一个实现了几个方法的类A和一个继承自A的类B.A类还实现了一个与另一个类C交互的运算符*,类似于:
class A
{
...
C operator*(const C &_objectC) {...}
}
class B: public A
{
...
}
由于A和B之间的更改不会更改运算符*的实现,因此从A继承它而不是重新实现它会很好。我一直在尝试这样做,但编译器找不到由A实现的运算符。
在以下代码中:
B foo = ...;
C bar = ...;
C result = foo * bar;
我遇到了这个错误:
error C2679: binary '*' : no operator found which takes a right-hand operand of type 'class C' (or there is no acceptable conversion)
我知道operator =必须重载,因为编译器总是为每个类生成一个版本,所以你不能直接继承它。
¿其他运营商可以继承吗?我的理解是可能的,但我的编译器不同意。 ¿有什么我做错了或者我只需要重新实现运算符来调用父类的运算符吗?
提前致谢。
答案 0 :(得分:2)
以下代码,相当于您所呈现的内容(在撰写本答案时),只添加了分号并填写了main
函数,有效:
class C {};
class A
{
public:
auto operator*( C const &_objectC ) const
-> C
{ return C(); }
};
class B: public A
{
};
auto main()
-> int
{
B foo = B();
C bar = C();
C result = foo * bar;
}
因此,您没有提供问题所在的代码。
答案 1 :(得分:0)
将运算符声明为非成员函数,编译器应编译代码。例如
C operator *( const A &, const C & );
或者您可以将此运算符声明为虚拟运算符,并在派生类中重新定义它。
也可以在A类中将运算符声明为私有?