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

哪里错了,求解,运算符重载

ehszt 发布于 2019-08-15 19:03, 2055 次点击
编译通不过
#include <iostream>
using namespace std;
class base
{
    float real,image;
    public:
        base (){}
        base (float x,float y):real(x),image(y){
        }
         base operator + (base ,base );
        void show()
        {
            cout<<real<<" +"<<image<<"i"<<endl;
        }
};

 base base::operator+(base a,base b)
 {
     base c;
     c.real=a.real+b.real;
     c.image=a.image+b.image;
     return c;
 }
 
 main()
 {
     base a(1.2,4.5),b(2.2,5.5);
     base c;
     c=a+b;
     c.show();
 }

[此贴子已经被作者于2019-8-15 19:52编辑过]

7 回复
#2
rjsp2019-08-16 09:07
base base::operator+(base a,base b)
要么去掉一个参数,变为 base base::operator+( base rhs ),即 *this 和 rhs 相加
要么加上friend,变为 friend base base::operator+(base a,base b),即与 *this 没有任何关系

程序代码:
#include <iostream>

class base
{
public:
    base() : real_(), image_()
    {
    }
    base( double real, double image=0.0 ) : real_(real), image_(image)
    {
    }
    friend base operator+( const base& lhs, const base& rhs );
    friend std::ostream& operator<<( std::ostream& os, const base& val );

protected:
    double real_, image_;
};

#include <iomanip>
#include <sstream>
using namespace std;

base operator+( const base& lhs, const base& rhs )
{
    return base( lhs.real_+rhs.real_, lhs.image_+rhs.image_ );
}
std::ostream& operator<<( std::ostream& os, const base& val )
{
    std::ostringstream buf;
    buf.flags( os.flags() );
    buf.imbue( os.getloc() );
    buf.precision( os.precision() );
    buf << val.real_ << setiosflags(ios::showpos) << val.image_ << 'i';
    return os << buf.str();
}

int main( void )
{
    base a(1.2,4.5), b(2.2,5.5);
    base c = a + b;
    cout << c << endl;

    cout << base(-1,-2) << endl;
}

#3
ehszt2019-08-16 11:28
哦,知道了,谢谢!
#4
ehszt2023-09-20 12:22
#include <iostream>
#include <iomanip>
using namespace std;
class base
{
    float real,image;
    public:
        base (){}
        base (float x,float y):real(x),image(y){
        }
          base operator + (base);
        void show()
        {
            cout<<real<<" +"<<image<<"i"<<endl;
        }
        private:
            
};
 base base::operator+(base a)
 {
    base c;
     c.real=real+a.real;
     c.image=image+a.image;
     return c;
 }
 
 main()
 {
     base a(1.2,4.5),b(2.2,5.5);
     base sum;
     sum=a.operator +(b);
     sum.show();
 }
#5
ehszt2023-09-21 11:16
#include <iostream>
using namespace std;

class time  {
        int hours,minutes;
    public:
        time() {

        }
        time(int a,int b){
            hours=a,minutes=b;
        }
        ~time() {

        }
        time operator+(time & );
       void    show();
};
time time::operator+(time &t) {
        time sum;
        sum.minutes=minutes+t.minutes;
        sum.hours=hours+t.hours+sum.minutes/60;
        sum.minutes%=60;
        return sum;
        }
void    time::show(){
           cout<<"总共是"<<hours<<"小时"<<minutes<<"分钟"<<endl;
       }        
int main()
{
    time a(31,35),b(21,36);
    time sum;
    sum=a.operator+(b);//sum=a+b也可以
    sum.show();
}


[此贴子已经被作者于2023-9-21 13:24编辑过]

#6
ehszt2023-09-21 12:41
#include <iostream>
using namespace std;

class time  {
        int hours,minutes;
    public:
        time() {

        }
        time(int a,int b){
            hours=a,minutes=b;
        }
        ~time() {

        }
        time total (time &,time & );
       void    show();
};
time time::total (time &t1,time &t2) {
        time sum;
        sum.minutes=t1.minutes+t2.minutes;
        sum.hours=t1.hours+t2.hours+sum.minutes/60;
        sum.minutes%=60;
        return sum;
        }
void    time::show(){
           cout<<"总共是"<<hours<<"小时"<<minutes<<"分钟"<<endl;
       }        
int main()
{
    time a(31,37),b(21,36);
    time sum;
    sum=sum.total(a,b);
    sum.show();
}
#7
ehszt2023-09-21 14:02
#include <iostream>
using namespace std;

class time  {
        int hours,minutes;
    public:
        time() {

        }
        time(int a,int b){
            hours=a,minutes=b;
        }
        ~time() {

        }
        time operator+(time & );
        time operator*(int);
      friend  time operator*(int a,time t){ //友元函数
            return t*a;
        }
       void    show();
};
time time::operator+(time &t) {
        time sum;
        sum.minutes=minutes+t.minutes;
        sum.hours=hours+t.hours+sum.minutes/60;
        sum.minutes%=60;
        return sum;
        }
        time time::operator*(int a) {
                time sum;
                sum.minutes=minutes*a+hours*a*60;
                sum.hours=sum.minutes/60;
                sum.minutes%=60;
                return sum;
                }
void    time::show(){
           cout<<"总共是"<<hours<<"小时"<<minutes<<"分钟"<<endl;
       }        
int main()
{
    time a(31,35),b(21,36);
    time sum;
    sum=2*a;
    sum.show();
    sum=b*2;
    sum.show();
}
#8
ehszt2023-10-07 11:57
复数运算符重载
#include <iostream>
using namespace std;
class complex
{
    double real,image;
    friend complex operator+(complex,complex);
    public:
        complex(){};
        complex(double _real,double _image):real(_real),image(_image){}
    void show(){cout<<real<<"+"<<image<<"i"<<endl;}
};

complex operator+(complex a,complex b)
{
    complex c;
    c.real=a.real+b.real;
    c.image=a.image+b.image;
    return c;
}
int main()
{
    complex result,a(3,5.5),b(7.2,3.1);
    result=a+b;
    result.show();
}
1