【发布时间】:2014-03-24 19:29:09
【问题描述】:
我在尝试使用 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= 必须被重载,因为编译器总是为每个类生成它的一个版本,所以你不能直接继承它。
¿可以继承其他运算符吗?我的理解是有可能,但我的编译器不同意。 ¿ 是不是我做错了什么,或者我只需要重新实现运算符才能调用父类的运算符?
提前致谢。
【问题讨论】:
-
你用的是什么编译器?我可以在 VS 2013 中很好地编译它。(注意:我假设 operator* 是公开的,为了简洁起见,这部分被省略了。)
-
你能发布一个不能编译的实际例子吗?这在 g++ 上运行良好。
标签: c++ visual-studio inheritance operators