注册 登录
编程论坛 C++教室

c++类的问题

newCpp 发布于 2009-10-14 09:08, 479 次点击
程序代码:
#include <iostream>
using namespace std;
class Complex                                     //定义Complex类
{public:
Complex(){real=0;imag=0;}            //定义构造函数
Complex(double r,double i){real=r;imag=i;}     //构造函数重载
Complex complex_add(Complex &c2);              //声明复数相加函数
void display();                                //声明输出函数
 private:
double real;                                   //实部
double imag;                                   //虚部
};

Complex Complex::complex_add(Complex &c2)
{Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;}   

void Complex::display()                            //定义输出函数
{cout<<"("<<real<<","<<imag<<"i)"<<endl;}

int main()
{Complex c1(3,4),c2(5,-10),c3;                     //定义3个复数对象
c3=(c2);                            //调用复数相加函数
cout<<"c1="; c1.display();                        //输出c1的值
cout<<"c2="; c2.display();                        //输出c2的值
cout<<"c1+c2="; c3.display();                     //输出c3的值
return 0;
}

/*为什么这段代码里面的
Complex(){real=0;imag=0;}  这个构造函数这么重要,将他去掉程序就会出错
这个是为什么??   */
受不了,看半天没看出来这句话有啥用,但他却真的起着至关重要的作用!!
5 回复
#2
flyingcloude2009-10-14 09:43
Complex Complex::complex_add(Complex &c2)
{Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;}

你这里调用了无参构造函数。
因为你已经有了构造函数,所以编译器不会再给你提供默认的构造函数
#3
最左边那个2009-10-14 10:05
大概就是楼上说的那样了
你有两处调用了无参数构造函数

Complex Complex::complex_add(Complex &c2)
{Complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return c;}

Complex c1(3,4),c2(5,-10),c3;   
#4
jjg2009-10-14 10:30
就是那样,那个c和那个c3
#5
mengfp2009-10-14 11:53
定义了有参构造函数,编译器不会再给你提供默认的构造函数
#6
newCpp2009-10-14 12:11
原来是这样的啊!!
谢谢各位大大了!!
1