鱼C论坛

 找回密码
 立即注册
查看: 1136|回复: 5

[已解决]转换函数的问题

[复制链接]
发表于 2020-4-24 15:07:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<iostream>
using namespace std;
class tet
{
        private:
                double real;
                double imag;
        public:
        friend        tet  operator +(tet a,tet b);
        //        operator double(){return real;}
                tet(double a=0,double b=51):real(a),imag(b){}
                tet(double r){imag=0,real=r;}
        friend ostream& operator <<(ostream& out,tet a)
        {
                out<<a.real<<" "<<a.imag<<endl;
                }        

               
                 
};

tet  operator +(tet a,tet b)
{
        return tet(a.real+b.real,a.imag+b.imag);

}
int main()
{
        tet c1(2,5),c2(5,5),c3;
        double a;

        c3=5.1+c1;//在这里报错
cout<<c3;

        return 0;
}//请问这段代码错在哪,转换函数不应该把5.1改变成一个类吗?
最佳答案
2020-4-24 16:33:03
  1. #include <iostream>

  2. using namespace std;

  3. class tet
  4. {
  5. private:
  6.     double real;
  7.     double imag;
  8. public:
  9.     tet operator+(const tet &rhs) const {
  10.         return tet(this->real + rhs.real, this->imag + rhs.imag);
  11.     }
  12.     tet() {imag = 0, real = 51;}
  13.     tet(double a, double b): real(a), imag(b) {}
  14.     tet(double r) {imag = 0, real = r;}
  15.     friend tet operator+(const tet &lhs, const tet &rhs) {
  16.         return lhs.operator+(rhs);
  17.     }
  18.     friend ostream &operator<<(ostream &out, const tet &a)
  19.     {
  20.         out << a.real << " " << a.imag << endl;
  21.         return out;
  22.     }
  23. };

  24. int main()
  25. {
  26.     tet c1(2, 5), c2(5, 5), c3;
  27.     double a;
  28.     c3 = 5.1 + c1;//在这里报了什么错? 看错误提示呀
  29.     cout << c3;
  30.     return 0;
  31. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-24 15:24:42 | 显示全部楼层
不太懂,不过你可以试试c3=c1+5.1;?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 16:06:37 From FishC Mobile | 显示全部楼层
这你想多了,不可能办的到。你重载的加法是传入两个tet对象,把对应的属性相加。使用的时候就必须是两个tet对象相加。把实参的类型强转成跟形参一致,这种事情大概只有int转double,或者子类转父类才能实现。数字转成对象,过于魔幻
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-24 16:20:35 | 显示全部楼层
倒戈卸甲 发表于 2020-4-24 16:06
这你想多了,不可能办的到。你重载的加法是传入两个tet对象,把对应的属性相加。使用的时候就必须是两个tet ...

事实上我刚刚已经做到了
#include<iostream>
using namespace std;
class tet
{
        private:
                double real;
                double imag;
        public:
        friend        tet  operator +(tet a,tet b);
        //        operator double(){return real;}
                tet(){}
                tet(double a,double b):real(a),imag(b){}
                tet(double r){real=r,imag=0;}
        friend ostream& operator <<(ostream& out,tet a)
        {
                out<<a.real<<" "<<a.imag<<endl;
                }       

               
                 
};

tet  operator +(tet a,tet b)
{
        return tet(a.real+b.real,a.imag+b.imag);

}
int main()
{
        tet c1(2,5),c2(5,5),c3;
        double a;
       

        c3=5.1+c1;
cout<<c3;

        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 16:33:03 | 显示全部楼层    本楼为最佳答案   
  1. #include <iostream>

  2. using namespace std;

  3. class tet
  4. {
  5. private:
  6.     double real;
  7.     double imag;
  8. public:
  9.     tet operator+(const tet &rhs) const {
  10.         return tet(this->real + rhs.real, this->imag + rhs.imag);
  11.     }
  12.     tet() {imag = 0, real = 51;}
  13.     tet(double a, double b): real(a), imag(b) {}
  14.     tet(double r) {imag = 0, real = r;}
  15.     friend tet operator+(const tet &lhs, const tet &rhs) {
  16.         return lhs.operator+(rhs);
  17.     }
  18.     friend ostream &operator<<(ostream &out, const tet &a)
  19.     {
  20.         out << a.real << " " << a.imag << endl;
  21.         return out;
  22.     }
  23. };

  24. int main()
  25. {
  26.     tet c1(2, 5), c2(5, 5), c3;
  27.     double a;
  28.     c3 = 5.1 + c1;//在这里报了什么错? 看错误提示呀
  29.     cout << c3;
  30.     return 0;
  31. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-24 16:38:26 | 显示全部楼层
320374616 发表于 2020-4-24 16:20
事实上我刚刚已经做到了
#include
using namespace std;

嗯,好吧我错了。没仔细读代码,这里你提供了传入一个参数的构造函数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-5 10:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表