新手求指导C++关于重载的有关问题,对高手来说是很简单的一个有关问题
新手求指导C++关于重载的问题,对高手来说是很简单的一个问题
本人初学C++,遇到了一些问题,
1.本人用的是XCODE6.0,而教材用的都是VC++6.0,老师说其实VC++6.0早就应该被淘汰了,所以建议我用XCODE试试,但是问题就来了,教材的内容都是默认VC++6.0的呀,我在用XCODE学习的过程中把教材的代码打进去,经常会发现报错,现在自己很疑惑,求指导一二。
2.我的问题就是在重载运算符这里,
#include<iostream>
#include<cmath>
using namespace std;
class complex{
double real,image;
public:
complex(double r=0,double i=0){real=r;image=i;}
complex(complex&com){
real=com.real;
image=com.image;
}
void print(){
cout<<"呵呵"<<endl;
}
friend complex operator+(const complex&,const complex&);
friend complex operator+=(complex&,const complex&);
friend double abs(complex&);
friend complex operator*(const complex&,const complex&);
friend complex operator/(const complex&,const complex&);
};
complex operator+(const complex& c1,const complex& c2){
return complex(c1.real+c2.real,c1.image+c2.image);
}
问题就是+号的定义那里,以上是教材给的内容,直接返回无名的对象XCODE会报错,如果建立一个临时变量,再赋值再返回反而不会。。。。。。为什么?
3.class complex{
double real,image;
public:
complex(){real=0;image=0;}
complex(double r,double i){
real=r;
image=r;
}
complex(complex&com){
real=com.real;
image=com.image;
}
void display();
complex operator-(complex&com);
complex operator/(complex&com);
complex operator*(complex&com);
friend complex operator+(const complex &,const complex & );
double abs();
};
中间省略——————————————————————————————
complex operator+(const complex & com1, const complex & com2){
complex temp;
temp.real=com1.real+com2.real;
temp.image=com1.image+com2.image;
return temp;
}
——————————————————————————————
int main(){
double d=0.5;
complex c1(1,1),c;
c=c1+d;
}
本来想实现的是只定义一个函数就可以实现复数和复数的假发,复数和实数的加法,实数和实数的加法,以上也是教材的内容,但是主函数那里c=c1+d报错,invalid operands to binary expression('complex'and 'double'),无效操作数?这又是什么情况,第一次遇到,求帮帮忙。第一次发帖。
------解决思路----------------------
complex(complex&com)---》complex(const complex&com)看看你还会报错不
------解决思路----------------------
第一个需要正确的复制构造函数。
第二个需要接受 double 的单参数构造函数,比如:
------解决思路----------------------
你这里返回值优化需要有const &参数的拷贝构造函数才会执行
本人初学C++,遇到了一些问题,
1.本人用的是XCODE6.0,而教材用的都是VC++6.0,老师说其实VC++6.0早就应该被淘汰了,所以建议我用XCODE试试,但是问题就来了,教材的内容都是默认VC++6.0的呀,我在用XCODE学习的过程中把教材的代码打进去,经常会发现报错,现在自己很疑惑,求指导一二。
2.我的问题就是在重载运算符这里,
#include<iostream>
#include<cmath>
using namespace std;
class complex{
double real,image;
public:
complex(double r=0,double i=0){real=r;image=i;}
complex(complex&com){
real=com.real;
image=com.image;
}
void print(){
cout<<"呵呵"<<endl;
}
friend complex operator+(const complex&,const complex&);
friend complex operator+=(complex&,const complex&);
friend double abs(complex&);
friend complex operator*(const complex&,const complex&);
friend complex operator/(const complex&,const complex&);
};
complex operator+(const complex& c1,const complex& c2){
return complex(c1.real+c2.real,c1.image+c2.image);
}
问题就是+号的定义那里,以上是教材给的内容,直接返回无名的对象XCODE会报错,如果建立一个临时变量,再赋值再返回反而不会。。。。。。为什么?
3.class complex{
double real,image;
public:
complex(){real=0;image=0;}
complex(double r,double i){
real=r;
image=r;
}
complex(complex&com){
real=com.real;
image=com.image;
}
void display();
complex operator-(complex&com);
complex operator/(complex&com);
complex operator*(complex&com);
friend complex operator+(const complex &,const complex & );
double abs();
};
中间省略——————————————————————————————
complex operator+(const complex & com1, const complex & com2){
complex temp;
temp.real=com1.real+com2.real;
temp.image=com1.image+com2.image;
return temp;
}
——————————————————————————————
int main(){
double d=0.5;
complex c1(1,1),c;
c=c1+d;
}
本来想实现的是只定义一个函数就可以实现复数和复数的假发,复数和实数的加法,实数和实数的加法,以上也是教材的内容,但是主函数那里c=c1+d报错,invalid operands to binary expression('complex'and 'double'),无效操作数?这又是什么情况,第一次遇到,求帮帮忙。第一次发帖。
------解决思路----------------------
complex(complex&com)---》complex(const complex&com)看看你还会报错不
------解决思路----------------------
第一个需要正确的复制构造函数。
complex(complex const&com){
real=com.real;
image=com.image;
}
第二个需要接受 double 的单参数构造函数,比如:
complex(double r){
real=r;
image=0;
}
------解决思路----------------------
你这里返回值优化需要有const &参数的拷贝构造函数才会执行