C++ 在c+中实现复数幂函数+;?
正如标题所说,我正在尝试实现一个操作符^(int n),它将计算一个复数的n次方。我知道C++ 在c+中实现复数幂函数+;?,c++,class,operator-overloading,C++,Class,Operator Overloading,正如标题所说,我正在尝试实现一个操作符^(int n),它将计算一个复数的n次方。我知道这个是一个指向当前类对象的指针,所以我想出了以下代码: class Complex{ protected: float a,b; public: Complex() {a=0;b=0;} Complex(float x, float y){a=x;b=y;} void set(float x, float y){a=x;b=y;}
这个
是一个指向当前类对象的指针,所以我想出了以下代码:
class Complex{
protected:
float a,b;
public:
Complex() {a=0;b=0;}
Complex(float x, float y){a=x;b=y;}
void set(float x, float y){a=x;b=y;}
Complex operator*(Complex C){
Complex temp;
temp.a=a*C.a-b*C.b;
temp.b=a*C.b+b*C.a;
return temp;
}
Complex operator^(int n){
Complex ONE=Complex(1,0);
if (n<=0) return ONE;
return ((*this)*((*this)^(n-1)));
}
void Display(){
cout<<a<<' '<<b<<endl;
}
};
int main() {
Complex C;
C.set(2,0);
C=C^3;
C.Display();
}
类复合体{
受保护的:
浮子a、b;
公众:
复数(){a=0;b=0;}
复数(浮点x,浮点y){a=x;b=y;}
空集(float x,float y){a=x;b=y;}
复数运算符*(复数C){
复合温度;
温度a=a*C.a-b*C.b;
温度b=a*C.b+b*C.a;
返回温度;
}
复数运算符^(int n){
复合物1=复合物(1,0);
如果(n您知道有一个模板类型,它有自己的专门化吗
#include <complex>
#include <iostream>
int main() {
std::complex<double> c(2,0);
std::complex<double> c3 = pow(c, 3);
std::cout << c3 << "\n";
}
#包括
#包括
int main(){
配合物c(2,0);
复合物c3=pow(c,3);
std::cout您知道有一种模板类型,它有自己的专门化吗
#include <complex>
#include <iostream>
int main() {
std::complex<double> c(2,0);
std::complex<double> c3 = pow(c, 3);
std::cout << c3 << "\n";
}
#包括
#包括
int main(){
配合物c(2,0);
复合物c3=pow(c,3);
标准::cout
如果有人能告诉我如何在第15行创建一个常量类对象,比如Java中的BigInteger.ONE,我也非常感激
将其放入复杂声明中:
class Complex {
...
const static Complex ONE;
};
const Complex Complex::ONE(1,0);
并且,把这个放在你复杂的声明之外:
class Complex {
...
const static Complex ONE;
};
const Complex Complex::ONE(1,0);
如果将复杂声明放在头文件(例如Complex.hpp)中,则应该将第二行(Complex::ONE定义)正好放在一个源代码文件(例如Complex.cpp)中
如果有人能告诉我如何在第15行创建一个常量类对象,比如Java中的BigInteger.ONE,我也非常感激
将其放入复杂声明中:
class Complex {
...
const static Complex ONE;
};
const Complex Complex::ONE(1,0);
并且,把这个放在你复杂的声明之外:
class Complex {
...
const static Complex ONE;
};
const Complex Complex::ONE(1,0);
如果将复杂声明放在头文件(例如Complex.hpp)中,则应该在一个源代码文件(例如Complex.cpp)中插入第二行(Complex::ONE定义)请注意不要使用<代码> ^ <代码>作为C++中的幂运算符,它有错误的优先级。<代码> STD:有什么不对:复数< /java >和<代码> STD::POW?@ MIHNHAT93:所以使用命名函数,而不是操作符。程序员希望电源是一个操作员。@ MiNHNH939,那么你应该改变你正在演讲的地方;没有明智的讲师会告诉你使用C++中的代码>操作符^()<代码>。@ GriWe:改变过程可能不是一个选项,但他应该正确地做它(一个函数名为代码> POW)并准备捍卫这一点,指出C++的标准委员会,谁不是傻瓜,决定是更好的方法。即使它是诱人的-请不要使用<代码> ^ <代码>作为C++中的一个幂运算符,它有错误的优先级。<代码> STD:什么是错的:复数< /代码>和<代码> STD::POW?@ MIHNHAT93:所以使用NAM:ED函数,而不是操作符。没有C++(或C++或java)程序员希望电源是一个操作符。@ MIHNHAT93:那么你应该改变你正在演讲的地方;没有明智的讲师会告诉你在C++中使用<代码>操作符^()>代码> @ GriWes:改变课程可能不是一个选项,但他应该正确地做。(名为pow
的函数)并准备辩护,指出C++标准委员会,谁不是傻瓜,决定是更好的方法。不需要限定<代码> POW<代码> > <代码> STD::/COD>,因为ADL将找到正确的功能。是的,我搜索过,但我需要实现操作符^,因为这是homework@minhnhat93你的代码有很多优点问题,但至少它会产生你期望的结果,所以我不知道发生了什么。不需要用std::
限定pow
,因为ADL会找到正确的函数。是的,我搜索了,但我需要实现运算符^homework@minhnhat93好吧,你的代码有很多问题,但至少它会产生你想要的结果xpect,所以我不知道发生了什么。但这会扼杀优化…因此不推荐使用。更好的方法是class Complex{/*…*/public:static Complex ONE(){return Complex(1,0);}
;它将被内联并优化。谢谢Rob:D,但您能告诉我为什么我们需要只写const static
,而不是const
?此上下文中的static
关键字指定了一个静态数据成员。静态数据成员不是任何对象的一部分,但对于该类的所有对象都存在一次。这是类似于Java调用的类变量。如果这不是您要求的行为,请忽略我的回答。它工作得很好,我这样问是因为我想清楚地理解事情。谢谢!这会扼杀优化…因此不推荐使用。class Complex{/*…*/public:static Complex ONE(){return Complex(1,0); } }
;它将被内联并优化。谢谢Rob:D,但您能告诉我为什么我们需要只写const static
,而不是const
?此上下文中的static
关键字指定了一个静态数据成员。静态数据成员不是任何对象的一部分,但对于该类的所有对象都存在一次。这是类似于Java所称的类变量。如果这不是您要求的行为,请忽略我的回答。它工作得很好,我这样问是因为我想清楚地理解事情。谢谢!