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

发布于 2024-12-03 22:21:54 字数 624 浏览 0 评论 0原文

我已经构建了一个代表矩阵的类,并且覆盖了所有 算术运算符。下面是重载一元负 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

我得到 一元减号的类型参数错误 有什么想法为什么会发生这种情况吗?谢谢!

聚苯乙烯 另一个问题:“=”运算符会被复制构造函数自动覆盖,对吧?

I've build a class representing a matrix and I override all
the arithmetic operators. Here's an example of overloading the unary minus

RegMatrix.h:

const RegMatrix operator - ();

RegMatrix.cpp

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

Now, this works perfect when I instantiate object on the stack like this: RegMatrix a(3,3,v) (v is a vector of values, doesn't matter).
When I use the new keyword like this (in main.cpp):

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

I get wrong type argument to unary minus
Any ideas why this happens? Thanks!

P.S.
Another question: the '=' operator is automatically overridden by the copy constructor, right?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

漫漫岁月 2024-12-10 22:21:54

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

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

不过,正如 @leftaroundabout 在评论中指出的那样,这不是一个好方法在 C++ 中工作,根据经验,如果可以的话,您会尽量避免动态分配(它会更慢,并且如果您不希望内存泄漏,则需要智能指针)。

The type of a is RegMatrix *, not RegMatrix; if you want to apply operators on the object to which a points you have to dereference a (*a), apply the operator to it (-(*a)) and, if you want a separate instance of it on the heap, create a new copy of it on the heap with new and the copy constructor:

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

Still, as @leftaroundabout pointed out in a comment, this is not a good way to work in C++, where, as a rule of thumb, you try to avoid dynamic allocation if you can (it's slower and it requires smart pointers if you don't want memory leaks).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文