回 帖 发 新 帖 刷新版面

主题:运算符重载和友元函数的小问题

#include <iostream>
using namespace std;

class complex
{
    int real;
    int imag;
public:
    complex(int a,int b){real=a;imag=b}
    complex operator+(complex &);
    complex operator+(int&);
    friend complex operator +(int &,complex &);//问题在这里,到底是什么问题呢
    void print(){cout<<a<<"."<<b<<"i"<<endl;}
};
complex complex::operator +(complex &c)
{
    return complex(real+c.real;imag+c.imag);
}

complex complex::operator +(int &c)
{
    return complex(real+c;imag+0);
}
complex operator +(int &b,complex &c)
{
    return complex(b+c.real;0+c.imag);
}

int main()
{
    complex a(1,2),b(2,3),c;
        
    c=a+b;
    c.print();

    int i=5;

    c=5+a;
    c.print();

    c=a+5;
    c.print();

}



Compiling...
COMPLEX.CPP
D:\学习资料\c++\运算符重载\代码练习\COMPLEX.CPP(12) : fatal error C1001: INTERNAL COMPILER ERROR
        (compiler file 'msc1.cpp', line 1786) 
         Please choose the Technical Support command on the Visual C++ 
         Help menu, or open the Technical Support help file for more information
执行 cl.exe 时出错.

COMPLEX.OBJ - 1 error(s), 0 warning(s)


请执教谢谢谢谢~~~~~鞠躬~~~~

回复列表 (共2个回复)

沙发

我过去的学习中,对于友元函数用了很少,不过我好象记得,友元不能被定义为公共成员

板凳

你的程序有很多小毛病,我就不说了,自己找找。

--------------------------------------------------

你的重载方法没有错。但是像+、-、[]等一些运算符编译器是不允许全局重载的,会导致冲突和混乱。你只能将这些运算符进行类成员函数级的重载。像*等之类的运算符可以重载为全局的。

我来回复

您尚未登录,请登录后再回复。点此登录或注册