C++中的复数赋值

来源:百度知道 编辑:UC知道 时间:2024/09/20 07:39:21
#include<iostream>
#include<complex>
using namespace std;
struct branch{
int begin,end;
double r,x;
complex <double> num;
};
int main(){
branch branch1;
branch1.r=1;
branch1.x=2;
branch1.num(branch1.r,branch1.x);
return 0;
}
我想把branch1.r作为实部,branch1.x作为虚部,组成一个复数赋值给branch1.num。
应该怎么做呢?
我自己写了这个代码,但有错误。
还有complex <double> num这样调用complex库有问题吗?
明澈2007:
重载运算符=在complex库里有定义吗?
还是要自己编写?
如果有的话,可是我是想将2个double型数组合成一个复数赋值给num的,这样也可以用那个重载的=函数吗?或者说想实现我这个目标,有已经存在的可以调用的函数吗?

谢谢明澈2007,这个分肯定给你,还会有加的。

我看了complex里的接口函数,但没找到我想要的。
我想 将2个double型数组合成一个复数赋值给num,不能在初始化时调用构造函数,这样还有什么函数能实现呀?

你说的我都懂,我现在要问的是怎么实现我这种赋值,operator=是在2个复数之间相互赋值,可是我现在是想将2个double组成一个复数进行赋值……

#include<iostream>
#include<complex>
using namespace std;
struct branch{
int begin,end;
double r,x;
complex <double> num;
};
int main(){
branch branch1;
branch1.r=1;
branch1.x=2;
branch1.num(branch1.r,branch1.x);// 改为branch1.num=complex<double>::complex(branch1.r,branch1.x);原因是主函数开头你已经定义了一个branch对象,同时也就定义了体内的num成员(即调用complex<double>的默认构造函数),如果想对他进行赋值,就不能用这样的方式,只能用operator=来实现
return 0;
}
//楼主:标准complex<T>已经定义了operator=所以就像上面这样直接调用就行。如果你还想知道标准complex<T>的其他接口的话,你可以在源文件中输入(在此之前,先Ctrl+F7):
"complex<double>::",当你输入第二个冒号时,会弹出个列表,里面全都是complex<double>类中的接口以及成员,operator=是在其中的

//楼主:你定义的结构体
struct branch{
int begin,end;
double r,x;
complex <double> num;
};
所以你写诸如:
branch obj;时编译器在“暗地”里是调用了complex的默认构造函数(这时的num.re==0,num.im==0),也就是说此时num已经被初始化了(即已经存在),而能做到初始化就是构造函数的职责,而不管是什么对象只能初始化一下(就像每个人