关于资源和操作符重载疑问

Posted on 2006-04-21 22:41 Harry 阅读(531) 评论(3)  编辑 收藏 引用 所属分类: C++

我定义了一个类,定义如下:

 

class  SimpleClass
{
  
public :
    SimpleClass(
int  value = 0 );
    SimpleClass
&   operator + ( const  SimpleClass &  right)  const ;
    
void   operator = ( const  Simple &  right);

    
int  m_iValue;
}


SimpleClass
&  SimpleClass:: operator + ( const  SimpleClass &  right) const
{
  SimpleClass
*  scPlusResult = new  SimpleClass();
  scPlusResult
-> m_iValue = m_iValue + right.m_iValue;

  
return   * scPlusResult; 
}


void  SimpleClass:: operator = ( const  SimpleClass &  right)
{
  m_iValue
= right.m_iValue;
}


int  mian()
{
  SimpleClass sc1
= new  SimpleClass( 1 );
  SimpleClass sc2
= new  SimpleClass( 2 );
  SimpleClass sc3
= new  SimpleClass();

  sc3
= sc1 + sc2;

  delete sc1;
  delete sc2;
  delete sc3;

  
return   0 ;
}



///////////////////////////////////////////////////////////////////////////

提问:
1。符号+的重载里scPlusResult的资源在最后释放掉了吗?如果没有,要怎么实现?
2。对于符号+的重载还有其他的实现方法吗?

热烈欢迎大家讨论!!!!

Feedback

# re: 关于资源和操作符重载疑问  回复  更多评论   

2006-04-22 00:38 by 芋头
+操作符返回一个临时对象,不要去new,返回类型不是引用类型,剩下的就好写了。

# re: 关于资源和操作符重载疑问  回复  更多评论   

2006-04-22 00:56 by 芋头
=操作符一般还要返回该对象的引用。+操作符最好写成全局的,不要作为成员函数,好处下面解释。另外代码似乎充满了C#或JAVA代码风格,错误很多,还是先搞清C++语法再做吧,每种语言都有它的特色。我简单整理了一下:
class SimpleClass
{
friend SimpleClass operator + (const SimpleClass& lhs, const SimpleClass& rhs);
public :
SimpleClass(int value = 0);
SimpleClass& operator = (const SimpleClass& right);

int m_iValue;
} ;

SimpleClass::SimpleClass(int value)
:m_iValue(value)
{
}

SimpleClass& SimpleClass::operator = (const SimpleClass& right)
{
m_iValue = right.m_iValue;
return *this;
}

SimpleClass operator + (const SimpleClass& lhs, const SimpleClass& rhs)
{
return SimpleClass(lhs.m_iValue + rhs.m_iValue);
}

int main()
{
SimpleClass sc1( 1 );
SimpleClass sc2( 2 );
SimpleClass sc3;

sc3 = sc1 + sc2;
sc3 = sc1 + 1;
sc3 = 1 + sc1;

return 0 ;
}
上面所说的好处就是,sc3 = sc1 + 1; 和sc3 = 1 + sc1这2个都可以成立了,如果写成成员函数,则后一个不能编译。

# re: 关于资源和操作符重载疑问  回复  更多评论   

2006-04-23 20:41 by Harry
多谢大哥了,呵呵

这段代码是随手写的,也没仔细校验了。要不断学习啊!呵呵

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


posts - 6, comments - 3, trackbacks - 0, articles - 1

Copyright © Harry