关于双目运算符的重载问题

来源:百度知道 编辑:UC知道 时间:2024/07/08 17:52:20
多谢高手门的关心,下面切入正题
在C++中可以重载运算符,比如加法运算符+是双目运算符,那么就有这样一个问题

class Num
{
public: int * n ;
Num() { n = new int[1000] ; }
~Num() { delete [] n ; }
Num friend operator + ( Num& a , Num& b )
{
Num c ;
int i ;
for ( i = 0 ; i < 1000 ; i++ ) c.n[i] = a.n[i] + b.n[i] ;
return c ;
}
void main()
{
Num a , b , r ;
r = a + b ;
}
这样一来就有问题,在重载运算符函数operator + 中,建立的Num c是一个临时对象,当函数运行结束后,会自动调用它的析构函数,这样一来,它的运算结果n[1000]这个数组就被清理掉了,无法返回给main()中的r
当然,如果将类class Num中的析构函数中delete命令去掉,也是可以的,但是这样不太好,呵呵
我想问的是,有没有可能将主函数中r=a+b , 让计算机自动将r的引用传递给operator+函数,这样,就可以将a+b 的运算结果返回给r了
谢谢各位!!

class Num
{
public: int * n ;
Num() { n = new int[1000] ; }
~Num() { delete [] n ; }
friend Num & operator + ( Num& a , Num& b );
};
Num& operator + ( Num& a , Num& b )
{
Num *c=new Num() ;
int i ;
for ( i = 0 ; i < 1000 ; i++ ) c->n[i] = a.n[i] + b.n[i] ;
return *c ;
}
void main()
{
Num a , b , r ;
r = a + b ;
}

……