复数运算符重载的程序,不加拷贝构造函数正常运行,加了反而报错,是什么问题

C++语言 码拜 9年前 (2016-04-14) 971次浏览
#include<iostream>
using namespace std;
class complex{
	public:
		complex(const complex &a);      //拷贝构造函数 
		void set(int,int);
		void print();
		complex operator+ (complex &a);
		complex operator- (complex &a);
		complex operator* (complex &a);
		complex operator/ (complex &a);
	private:
		int real,image;
};
complex::complex(const complex &a){     //拷贝构造函数
	real=a.real;
	image=a.image;
}
void complex::set(int x, int y){
	real=x;
	image=y;
}
void complex::print(){
	if(image>=0)
	    cout<<real<<"+"<<image<<"i"<<endl;
	else if(image<0)
	    cout<<real<<image<<"i"<<endl;
}
complex complex::operator+ (complex &a){
	complex b;
	b.real=real+a.real;
	b.image=image+a.image;
	return b;
}
complex complex::operator- (complex &a){
	complex b;
	b.real=real-a.real;
	b.image=image-a.image;
	return b;
}
complex complex::operator* (complex &a){
	complex b;
	b.real=real*a.real-image*a.image;
	b.image=image*a.real+image*a.image;
	return b;
}
complex complex::operator/ (complex &a){
	complex b;
	b.real=(real*a.real+image*a.image)/(a.real*a.real+a.image*a.image);
	b.image=(image*a.real-image*a.image)/(a.real*a.real+a.image*a.image);
	return b;
}
int main(){
	complex a,c;
	a.set(1,2);
	complex b=a;
	c=a+b;
	c.print();
}
解决方案

40

假如你为类写好了拷贝构造函数的话,那么默认的拷贝构造函数将不再起作用。
所以你相似的定义变量complex b;都会报错。
所以需要加上一个默认构造函数

#include<iostream>
using namespace std;
class complex{
	public:
		complex(){}
		complex(const complex &a);      //拷贝构造函数 
		void set(int,int);
		void print();
		complex operator+ (complex &a);
		complex operator- (complex &a);
		complex operator* (complex &a);
		complex operator/ (complex &a);
	private:
		int real,image;
};
complex::complex(const complex &a){     //拷贝构造函数
	real=a.real;
	image=a.image;
}
void complex::set(int x, int y){
	real=x;
	image=y;
}
void complex::print(){
	if(image>=0)
	    cout<<real<<"+"<<image<<"i"<<endl;
	else if(image<0)
	    cout<<real<<image<<"i"<<endl;
}
complex complex::operator+ (complex &a){
	complex b;
	b.real=real+a.real;
	b.image=image+a.image;
	return b;
}
complex complex::operator- (complex &a){
	complex b;
	b.real=real-a.real;
	b.image=image-a.image;
	return b;
}
complex complex::operator* (complex &a){
	complex b;
	b.real=real*a.real-image*a.image;
	b.image=image*a.real+image*a.image;
	return b;
}
complex complex::operator/ (complex &a){
	complex b;
	b.real=(real*a.real+image*a.image)/(a.real*a.real+a.image*a.image);
	b.image=(image*a.real-image*a.image)/(a.real*a.real+a.image*a.image);
	return b;
}
int main(){
	complex a,c;
	a.set(1,2);
	complex b=a;
	c=a+b;
	c.print();
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明复数运算符重载的程序,不加拷贝构造函数正常运行,加了反而报错,是什么问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)