运算符重载和指向对象的指针,c ++

时间:2011-09-10 14:40:26

标签: c++ operator-overloading

我构建了一个表示矩阵的类,我覆盖了所有 算术运算符。这是一个重载一元减号

的例子

RegMatrix.h:

const RegMatrix operator - ();

RegMatrix.cpp

const RegMatrix RegMatrix::operator - ()
{
    RegMatrix newMatrix(*this);
    newMatrix *= -1;
    return newMatrix;
}

现在,当我在堆栈上实例化对象时,这是完美的:RegMatrix a(3,3,v)(v是值的向量,无关紧要)。 当我像这样使用new关键字时(在main.cpp中):

RegMatrix* a = new RegMatrix(3,3,v);
RegMatrix* b = -a; //<---ERROR HERE

我得wrong type argument to unary minus 任何想法为什么会这样?谢谢!

P.S。 另一个问题:'='运算符被复制构造函数自动覆盖,对吧?

1 个答案:

答案 0 :(得分:3)

a的类型为RegMatrix *,而不是RegMatrix;如果您要对a点必须取消引用a*a)的对象应用运算符,请将运算符应用于它(-(*a)),如果您在堆上想要一个单独的实例,在堆上用new和复制构造函数创建它的新副本:

RegMatrix* a = new RegMatrix(3,3,v);
RegMatrix* b = new RegMatrix(-(*a));

然而,正如@leftaroundabout在评论中指出的那样,这不是一种在C ++中工作的好方法,根据经验,你可以尝试避免动态分配(它的速度较慢而且需要智能指针)如果你不想要内存泄漏)。