| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 588 人关注过本帖
标题:关于C++转换构造函数的问题求教!
只看楼主 加入收藏
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
结帖率:90.24%
收藏
已结贴  问题点数:20 回复次数:6 
关于C++转换构造函数的问题求教!
//本人用的是VS2010,编写了这个程序实现运算符的重载,中间用到了转换构造函数,但是程序一直编译不通过,请问是我的代码问题还是VS2010的问题吗?
#include<iostream>
using namespace std;
class Complex
{
public:
    Complex();
    Complex(int,int);
    ~Complex();
    Complex(double r){real=r;imag=0;}                   //此处定义转换构造函数
    friend Complex operator+(Complex &a,Complex &b);
    friend Complex operator-(Complex &a,Complex &b);
    friend Complex operator*(Complex &a,Complex &b);
    friend Complex operator/(Complex &a,Complex &b);
    friend ostream&operator<<(ostream&output,Complex&exp);
    friend istream&operator>>(istream&input,Complex&exp);
private:
    double real;
    double imag;
};

Complex::Complex(){}
Complex::Complex(int a,int b):real(a),imag(b){}
Complex::~Complex(){}

Complex operator+(Complex &a,Complex &b)
{
    return Complex(a.real+b.real,a.imag+b.imag);
}

Complex operator-(Complex &a,Complex &b)
{
    return Complex(a.real-b.real,a.imag-b.imag);
}

Complex operator*(Complex &a,Complex &b)
{
    return Complex((a.real*b.real-a.imag*b.imag),(a.real*b.imag+a.imag*b.real));
}

Complex operator/(Complex &a,Complex &b)
{
    return Complex((a.real*b.real+a.imag*b.imag)/(b.real*b.real+b.imag*b.imag),(a.imag*b.real-a.real*b.imag)/(b.real*b.real+b.imag*b.imag));
}

ostream&operator<<(ostream&output,Complex&exp)
{
    if(exp.imag<0)
        output<<exp.real<<"+"<<-exp.imag<<"i";
    else
        output<<exp.real<<"+"<<exp.imag<<"i";
    return output;
}

istream&operator>>(istream&input,Complex&exp)
{
    input>>exp.real>>exp.imag;
    return input;
}

int main()
{
    Complex a,b,c;
    double d=9;
    cin>>a;
    c=a+d;      //此处想利用转换构造函数将d转换为Complex类型(9+0i)然后利用运算符重载进行计算,但一直出错!
    cout<<c<<endl;
    system("pause");

}
搜索更多相关主题的帖子: Complex include public double friend 
2015-09-22 15:28
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:7 
程序代码:
int main()
{
    Complex a,b,c;
    double d=9;
    Complex e=Complex(d);
    cin>>a;
    c=a+e;      //此处想利用转换构造函数将d转换为Complex类型(9+0i)然后利用运算符重载进行计算,但一直出错!
    cout<<c<<endl;
    system("pause");

}

剑栈风樯各苦辛,别时冰雪到时春
2015-09-22 20:24
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
收藏
得分:0 
回复 2楼 林月儿
请问系统不能自己默认转嘛?为神马谭浩强书上说可以默认转,而我的VS2010不行!

既然还有不甘心
就还没到放弃的时候~
2015-09-22 20:49
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
以下是引用S140131022在2015-9-22 20:49:37的发言:

请问系统不能自己默认转嘛?为神马谭浩强书上说可以默认转,而我的VS2010不行!


我的和你一样也不行

剑栈风樯各苦辛,别时冰雪到时春
2015-09-22 21:39
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:7 
拷贝构造函数的参数必须是本类的引用

一片落叶掉进了回忆的流年。
2015-09-22 23:42
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
搞错了,答非所问

一片落叶掉进了回忆的流年。
2015-09-22 23:43
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:7 
因为从 double 隐式构造出来的是 临时Complex对象(右值),没法进行 non-const reference

friend Complex operator+(Complex &a,Complex &b);
应该是
friend Complex operator+( const Complex& a, const Complex& b );
下同
2015-09-23 08:25
快速回复:关于C++转换构造函数的问题求教!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023100 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved