c++编程问题,其中一部分是求复数的共轭,

//在主函数里有z3 = !z1;如果加入求共轭这一部分、则求复数加减乘时的z1均变为z1的共轭,影响了原始结果,z1被保存到内存里没释放吗?为什么会这样呢?被注释掉的那部分是用成员函数重载运算符计算复数加法,我该怎么更改才能使被注释掉的与用友元函数求加法的同时运行呢?
#include "stdafx.h"
#include "iostream"
using std::cout;
using std::cin;
using std::endl;
//using namespace std;
class complex
{
public:
complex(double x, double y) {re=x; im=y;}
complex() {re=0; im=0;}
double query_re(){return re;};
double query_im(){return im;};
void show(){cout<< re << " + " << im <<"i\n";}
complex operator!();
friend complex operator+(complex &z1,complex &z2);
friend complex operator-(complex &z1,complex &z2);
friend complex operator*(complex &z1,complex &z2);
//complex operator+(complex &z2);
private:
double re;
double im;
};
complex complex::operator ! ()
{im = -im;return *this;}
complex operator+(complex &z1,complex &z2)
{return complex(z1.re+z2.re,z1.im+z2.im);}
complex operator-(complex &z1,complex &z2)
{return complex(z1.re-z2.re,z1.im-z2.im);}
complex operator*(complex &z1,complex &z2)
{return complex(z1.re*z2.re-z1.im*z2.im,z1.re*z2.im+z1.im*z2.re);}
//complex complex::operator +(complex &z2)
//{return complex(re+z2.re,im+z2.im);}
main()
{
double x, y;
cout << "请输入第一个复数z1的实部\n";
cin >> x;
cout << "请输入第一个复数z1的虚部\n";
cin >> y;

complex z1(x, y);

cout << "请输入第二个复数z2的实部\n" ;
cin >> x;
cout << "请输入第二个复数z2的虚部\n" ;
cin >> y;

complex z2(x, y);

complex z3;
z3 = !z1;
cout << "z1共轭是:";
(z3).show();
cout << "z1 + z2 = ";
(z1+z2).show();
cout << "z1 - z2 = ";
(z1-z2).show();
cout << "z1 * z2 = ";
(z1*z2).show();

return 0;
}

第1个回答  2011-04-15
complex complex::operator ! ()
{im = -im;return *this;}
那个这个代码把调用这个函数的对象的本身的值给该了呀!
{
return complex(re,-im);
}
这样简单又不给改本身的值。

那个重载+时,友元和成员函数用一个不就行了吗?
再说了,如果都有,同样是+,系统识别时会不知道调用哪一个的!同样两个参数,同样的运算符!不过要是那个第一个数不是你自定义的数据类型时,可以再重载友元函数,形参就不一样了!!其实对同一类型的用一个就行了,要想调试,一个一个来呗。

还有你那个输出复数的值时,会出现+-xx现象,可以在输出前加一个判断的!!对不同情形进行讨论,这样结果会更好看的!!本回答被提问者采纳

c++编程问题,其中一部分是求复数的共轭,
complex complex::operator ! (){im = -im;return *this;} 那个这个代码把调用这个函数的对象的本身的值给该了呀!{ return complex(re,-im);} 这样简单又不给改本身的值。那个重载+时,友元和成员函数用一个不就行了吗?再说了,如果都有,同样是+,系统识别时会不知道调用哪一个的!同样两...

求助一道C语言设计题目
include <stdio.h>int main(){ int year,n=0; for( year=1;year<=3000;year++ ) { if ( (year%4==0 && year%100!=0) || year%400==0 ) n++; } printf("n=%d\\n", n ); return 0;}

什么是共轭转置矩阵
共轭就是矩阵每个元素都取共轭(实部不变,虚部取负)。转置就是把矩阵的每个元素按左上到右下的所有元素对称调换过来。共轭转置就是先取共轭,再取转置。以复数为元素的矩阵,其共轭矩阵指对每一个元素取共轭之后得到的矩阵。共轭矩阵又称Hermite阵,每一个第i行第j列的元素都与第j行第i列的元素的...

...求出方程ax2+bx+c=0 的两个实根”这个问题的c++编程
》0有两个不同的实根 《0有两个共轭复根 不会的可以再问我。祝你能明白

C语言:求ax^2+bx+c=0方程的解
第一:第10行到第27行应该用大括号括起来,因为都是a不等于0的时候才做的处理 第二:输入严重错误,你在scanf中,三个%lf用的是逗号分隔,你在实际输入的时候也必须是逗号分隔,不能使用空格,否则a、b、c三个变量的值无法正确获取 第三:求共轭复根处有严重问题,因b*b-4*a*c已是负数,没...

用Java编写一个程序,其中包含一个计算面积的方法:计算圆的面积,参数...
public class test { public static void main(String[] args) { double R = 0, S, C, V;try { System.out.print("请输入圆的半径:");R = Double.parseDouble((new BufferedReader(new InputStreamReader(System.in))).readLine());} catch (Exception e) { System.out.println("你...

跪求c语言程序教程,先上100,搞定追加。
一).mp4 千锋-java语言教程-35_内部类和匿名内部类.mp4 千锋-java语言教程-34_Java当中的IO(三).mp4 千锋-java语言教程-33_Java当中的IO(二).mp4 千锋-java语言教程-32_Java当中的IO(一).mp4 千锋-java语言教程-31_Java当中的异常(二).mp4 千锋-java语言教程-30_Java当中的异常(一...

C语言编程,求一元二次方程 ax2+bx+c=0 的解,谢谢
include<cmath> using namespace std;int main(){ for (int i=0;i<2;i++){ double a,b,c,delta,p,q;cin>>a>>b>>c;delta=b*b-4*a*c;p=-b\/(2*a);q=sqrt(fabs(delta))\/(2*a);if (delta>=0)cout<<p+q<<endl<<p-q<<endl;else { cout<<p<<"+j"<<q;cout<<...

想了解C语言,求指导
回答:C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。 C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它...

从以前其他语言作品移植了个c++程序,结果编译出错,从头到尾was not...
C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此常说:C程序=主函数+子函数。 因此,对函数的定义、调用、值的返回等中要尤其注重理解和应用,并通过上机调试加以巩固。三.掌握一些简单的算法 编程...

相似回答