我有一个 VectorN
类和一个从 VectorN
继承的 Vector3
类(例如可以处理叉积)。 我在确定不同运算符的返回类型时遇到了困难。 例如:
class VectorN
{
public:
VectorN(){};
virtual VectorN operator*(const double& d) {.....};
std::vector<double> coords;
};
class Vector3 : public VectorN
{
public:
Vector3(){};
virtual Vector3 operator*(const double& d) {....};
};
这个例子会产生C2555错误:
'Vector3::operator *':覆盖虚函数的返回类型与 'VectorN::operator *' 不同且不是协变的,参见 'VectorN::operator *' 的声明。
问题在于我没有返回对 Vector3
的引用,而且在声明 operator*
时 Vector3
类还没有完全定义。但是,我希望我的 operator*
是虚的,并且在将一个 Vector3
乘以一个常数时返回一个 Vector3
(否则,如果我执行 (Vector3* double).crossProduct(Vector3)
,将会出现错误)。
我该怎么办?
谢谢!
auto_ptr
/unique_ptr
,但这些指针不能协变!X-P。 - Potatoswatterconst&
传递原始类型,应该通过值传递。(不要通过const&
或任何大小小于sizeof(void*)
的东西传递任何原始类型。) - GManNickGvalarray
。 - Potatoswattervalarray
(或数十个免费替代品之一)这样的库之上。重新实现向量和点积会让你走上错误的道路,很难回头。而生成随机向量或转换颜色空间应该是自由函数(在类外部),而不是方法。一个类不是一个库。 - Potatoswatter