C++ 在c+中实现复数幂函数+;?

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;}

正如标题所说,我正在尝试实现一个操作符^(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;}
      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所称的类变量。如果这不是您要求的行为,请忽略我的回答。它工作得很好,我这样问是因为我想清楚地理解事情。谢谢!