Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++从成员函数调用重载操作符(static)_C++ - Fatal编程技术网

C++从成员函数调用重载操作符(static)

C++从成员函数调用重载操作符(static),c++,C++,因此,我在实现自己的四元数类时遇到了一个问题,在从成员函数调用一个运算符静态函数时,我没有预料到这个问题。参见函数rotateByVector 我应该如何实现这个四元数乘以参数乘以这个四元数的共轭数 我知道我很了解,但我肯定错过了什么 因此,当您在问题中重载运算符时,您可以这样写:: 四元数运算符*四元数q1,四元数q2由于这是一个成员函数,您可以将其更改为 1个四元数运算符*四元数q2 或者可能使用友元函数,如 2友元四元数运算符*四元数q1,四元数q2 因此,当您想将两个四元数对象相乘并使用

因此,我在实现自己的四元数类时遇到了一个问题,在从成员函数调用一个运算符静态函数时,我没有预料到这个问题。参见函数rotateByVector

我应该如何实现这个四元数乘以参数乘以这个四元数的共轭数


我知道我很了解,但我肯定错过了什么

因此,当您在问题中重载运算符时,您可以这样写::

四元数运算符*四元数q1,四元数q2由于这是一个成员函数,您可以将其更改为

1个四元数运算符*四元数q2

或者可能使用友元函数,如

2友元四元数运算符*四元数q1,四元数q2

因此,当您想将两个四元数对象相乘并使用1中提到的声明时,可能是这样的:

Quaternion a, b, c;
c = a*b;
您的调用a*b以某种方式转换为a.operator*b本身,因此您不必显式调用四元数r=a.operator*b;就像我在你的代码中看到的一样 在运算符函数内部,您可以使用此指针访问的成员,因为对函数运算符*的调用在对象a上被调用

这就是运算符重载的目的!我们在对象之间使用普通运算符,而不调用函数

在使用2声明时,您使用了一个friend,friend不是一个成员函数,但它可以访问私有数据成员,因此当您使用声明2时,您为计算中涉及的两个对象传递了2个参数,因为这一次没有对任何对象调用该函数

进一步,您可以考虑从运算符重载函数中返回对象的引用,这将帮助您实现像A+B+C类一样的关联性。 将您的声明更改为:

四元数和运算符*四元数q2或

朋友四元数和运算符*四元数q1,四元数q2

希望这能有所帮助

试试看这个::
它详细地解释了一切

这个.conj;这不是一件事。接线员在哪里?请发布实数代码。*this.operator*q您是否试图使用运算符重载将两个类对象相乘?您显示的是+运算符,但使用的是*运算符。请用or来回答您的问题,您正在返回一个指向局部变量的指针:return double[3]{r.X,r.Y,r.Z};。而且你还声明了一个静态操作符重载,这是非法的。这段代码有十种编译方法。你的意思是让函数返回四元数-?会让它尝试一下并返回给你。谢谢你真正地回答了问题,而不是在上面挑刺。我用一些c语言编写了这段代码。因此指针出现了错误。别担心!!很好地改变返回类型实际上不会占用编译错误,也可以考虑改变你的语句四元数r= *。四元数r=*这个*q;如果您试图将这两个对象相乘!
Quaternion a, b, c;
c = a*b;