CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

如何返回一个对象

楼主leizhengdeng(权为妞妞所用,利为妞妞所谋)2001-12-19 11:37:24 在 C/C++ / C语言 提问

象  
  CString   a;  
  CString   b("123");  
  a   =   b   +   "456";  
   
  b+(cha   *)怎么返回一个CString对象,而这个对象不是b。  
  a   =   CString这里也返回一个对象,但是a并没有通过参数方式传进出,最后怎么得到。  
  就象c语言中如果返回的是char*,我们一般都要事先分配好再传进去,最后返回,而这里的对象都没传进函数里,怎么返回个队象?  
   
   
   
   
  问题点数:50、回复次数:25Top

1 楼lightning(lightning)回复于 2001-12-19 12:14:06 得分 25

我想你对CString   不太了解  
  1.CString   的构造函数有类型转化功能.  
  2.看一下CString重载的=就明白了        
  CString&   CSring   ::   operate   =   (const   CString   &   other)  
  是通过引用传递的.  
  3.构造函数有类型转化功能,会创建临时对象Top

2 楼lightning(lightning)回复于 2001-12-19 12:19:23 得分 0

也就是说   由char*   "456",程序使用构造函数创建一个CString   c("456"),然后+,再free   c.(你就不要担心了)  
  c即为临时对象.   自动创建与销毁Top

3 楼leizhengdeng(权为妞妞所用,利为妞妞所谋)回复于 2001-12-19 12:27:25 得分 0

我的意思是  
  CString&   CSring   ::   operate   =   (const   CString   &   other)  
  这样的函数(操作符重载也是函数)怎么写?  
  是通过引用传递的,具体点  
   
  class   A  
  {  
  private:  
  int   x;  
  int   y;  
  public:  
  A&   operate   =   (const   A&   a);  
  A&   operate   +   (int   add);  
  }  
   
  ////////////////////////  
  A   a(1,3);//这里省略了构造函数,就是a.x=1,   a.y=3  
  A   b;  
  b   =   a   +   2;//我要b.x   =   1+2   =3;   b.y   =   3+2   =5  
  现在问  
  A&   operate   =   (const   A&   a);  
  A&   operate   +   (int   add);  
  怎么写?    
   
   
   
  Top

4 楼lightning(lightning)回复于 2001-12-19 12:55:22 得分 0

A&   operate   =   (const   A&   a)  
  {  
  if(this   !=   &a)  
  {  
  x=a.x;  
  y=a.y;  
  }  
  return   *this;  
  }  
   
   
  A&   operate   +   (int   add)  
  {  
  x=x+add;  
  y=y+add;  
  return   *this;  
  }  
  Top

5 楼leizhengdeng(权为妞妞所用,利为妞妞所谋)回复于 2001-12-19 13:17:24 得分 0

A   a(1,3);//这里省略了构造函数,就是a.x=1,   a.y=3  
  A   b;  
  b   =   a   +   2;//我要b.x   =   1+2   =3;   b.y   =   3+2   =5  
  注意,运行这些代码後a.x还是1,a.y还是3  
  你上面的代码是把a,b作为同一对象,不行。  
  Top

6 楼leizhengdeng(权为妞妞所用,利为妞妞所谋)回复于 2001-12-19 13:34:02 得分 0

常写类的高手请帮帮忙Top

7 楼lightning(lightning)回复于 2001-12-19 13:55:01 得分 0

哈哈,不好意思忙着要午睡写错了  
  那个加成一元的了  
   
   
  A&   operate   +   (A&   a   ,int   add)  
  {  
  if(this!=   &a)  
  {  
  x=a.x+add;  
  y=a.y+add;  
  }  
  else  
  {  
  x+=add;  
  y+=aadd;  
  return   *this;  
  }  
  Top

8 楼lightning(lightning)回复于 2001-12-19 13:58:31 得分 0

tututu,  
  又错了  
   
  A&   operate   +   (A&   a   ,int   add)  
  {  
  if(this!=   &a)  
  {  
  x=a.x+add;  
  y=a.y+add;  
  }  
  else  
  {  
  x+=add;  
  y+=aad;  
  }  
  return   *this;  
  }Top

9 楼leizhengdeng(权为妞妞所用,利为妞妞所谋)回复于 2001-12-19 14:37:53 得分 0

出现binary   'operator   +'   has   too   many   parameters??Top

10 楼LXJ2001(lxj)回复于 2001-12-19 15:15:44 得分 5

CTest::CTest()  
  {  
        x   =   0;  
        y   =   0;  
  }  
  CTest::CTest(int   n)//这很关键  
  {  
  x   =   n;  
  y   =   n;  
  }  
  CTest::CTest(int   nX,int   nY)  
  {  
  x   =   nX;  
  y   =   nY;  
  }  
   
  CTest::~CTest()  
  {  
  }  
   
  CTest&   CTest::operator   =   (const   CTest&   a)  
  {  
      if(this   !=   &a)  
      {  
            x=a.x;  
            y=a.y;  
      }  
      return   *this;  
  }  
   
  CTest&   CTest::operator   +   (const   CTest&   a)  
  {  
          x+=a.x;  
          y+=a.y;  
          return   *this;  
  }  
  Top

11 楼leizhengdeng(权为妞妞所用,利为妞妞所谋)回复于 2001-12-19 15:26:01 得分 0

不行,你这样的意思是  
  CTest   =   CTest   +   CTest;  
  而不是  
  CTest   =   CTest   +   int;  
  Top

12 楼LXJ2001(lxj)回复于 2001-12-19 15:29:50 得分 0

对呀,我觉得CTest   +   int,应该把int先转换成CTestTop

13 楼leizhengdeng(权为妞妞所用,利为妞妞所谋)回复于 2001-12-19 15:34:00 得分 0

不符合我的本意  
  我的意思是  
  CTest   a(1,2)  
  CTest   b;  
  b   =   a   +   200;  
  a,   b运行后不相同的。  
  Top

14 楼lightning(lightning)回复于 2001-12-19 15:45:04 得分 0

const   A   A::   operator+(const   int   add)  
  {  
  A   c;  
  c.x   =   x   +add;  
  c.y   =   y   +add;  
   
  return   c;  
  }  
   
   
  Top

15 楼lightning(lightning)回复于 2001-12-19 15:45:54 得分 0

不能返回引用了Top

16 楼lightning(lightning)回复于 2001-12-19 15:48:06 得分 0

or  
   
  friend   const   A     operator+(const   A&   a,const   int   add);  
  const   A     operator+(const   A&   a,const   int   add)  
  {  
  A   c;  
  c.x=a.x+add;  
  c.y=a.y+add;  
  return   c;  
  }    
  Top

17 楼wwwjjf(让我呵呵你吧)回复于 2001-12-19 15:59:48 得分 0

gz!!!!Top

18 楼aauhii(快秃顶了)回复于 2001-12-19 16:01:28 得分 20

to;leizhengdeng(E-农民)   
  1.   关键字是operator   吧,或者operate   有什么用法,小弟不知。  
  2。重载+这类运算符一般pass   by   value,   不是pass   by   reference   ,  
  出现'operator   +'   has   too   many   parameters??     我觉得是上边大虾的做法应该声明为friend   吧。  
  3。不明白你的意图,b=   a+2,   你是要a保持呢还是要a也+2呢,我写的是a不变的  
  class   A  
  {  
  public:  
  int   x;  
  int   y;  
   
  A(int   a=0,   int   b=0):   x(a),   y(b)   {}  
  A&   operator=(const   A&   a);  
  A   operator+(int   add);  
  };  
   
  A&   A::operator   =   (const   A&   a)  
  {  
  if(this   !=   &a)  
  {  
  x   =   a.x;  
  y   =   a.y;  
  }  
  return   *this;  
  }  
   
  A   A::operator   +   (int   add)  
  {  
  return   A(x+add,   y+add);  
  }  
   
  main()  
  {  
  A   a(1,3);  
  A   b;  
  b=   a+2;  
  std::cout<<"this   is   b"<<b.x<<"     "<<b.y<<std::endl;  
  std::cout<<"this   is   a"<<a.x<<"     "<<a.y<<std::endl;  
   
  return   0;  
  }  
  4。从别的贴子上看到你说关于栈和堆地址范围的高见,不知那里看的,还是自己跟踪的,谢谢指教。  
    Top

19 楼aauhii(快秃顶了)回复于 2001-12-19 16:02:56 得分 0

to;leizhengdeng(E-农民)   
  1.   关键字是operator   吧,或者operate   有什么用法,小弟不知。  
  2。重载+这类运算符一般pass   by   value,   不是pass   by   reference   ,  
  出现'operator   +'   has   too   many   parameters??     我觉得是上边大虾的做法应该声明为friend   吧。  
  3。不明白你的意图,b=   a+2,   你是要a保持呢还是要a也+2呢,我写的是a不变的  
  class   A  
  {  
  public:  
  int   x;  
  int   y;  
   
  A(int   a=0,   int   b=0):   x(a),   y(b)   {}  
  A&   operator=(const   A&   a);  
  A   operator+(int   add);  
  };  
   
  A&   A::operator   =   (const   A&   a)  
  {  
  if(this   !=   &a)  
  {  
  x   =   a.x;  
  y   =   a.y;  
  }  
  return   *this;  
  }  
   
  A   A::operator   +   (int   add)  
  {  
  return   A(x+add,   y+add);  
  }  
   
  main()  
  {  
  A   a(1,3);  
  A   b;  
  b=   a+2;  
  std::cout<<"this   is   b"<<b.x<<"     "<<b.y<<std::endl;  
  std::cout<<"this   is   a"<<a.x<<"     "<<a.y<<std::endl;  
   
  return   0;  
  }  
  4。从别的贴子上看到你说关于栈和堆地址范围的高见,不知那里看的,还是自己跟踪的,谢谢指教。  
    Top

20 楼leizhengdeng(权为妞妞所用,利为妞妞所谋)回复于 2001-12-19 16:10:41 得分 0

还是不行Top

21 楼leizhengdeng(权为妞妞所用,利为妞妞所谋)回复于 2001-12-19 16:16:15 得分 0

我的目的是这样的  
  告诉你一个日期,比如公元4年2月29日,问89324234天後是什么日子?  
  要求自己写个类:最后形式如下:  
  CDate   a(4,2,29);  
  CDate   b;  
  b   =   a   +   89324234;  
  要求保留a和b  
  Top

22 楼lightning(lightning)回复于 2001-12-19 16:19:57 得分 0

yes.  
   
  A   A::operator   +   (int   add)  
  {  
  return   A(x+add,   y+add);  
  }  
   
  is   better   than  
   
  const   A   A::   operator+(const   int   add)  
  {  
  A   c;  
  c.x   =   x   +add;  
  c.y   =   y   +add;  
  return   c;  
  }  
   
   
  operate   是写错的,我copy过来的,如果你关心这个也没有办法.  
  重载+这类运算符一般pass   by   value,   不是pass   by   reference    
  pass   by   reference   比pass   by   value   要少一次对象的构造与析构(just   like   your   code   runs   more   qk),看情况而定了  
   
  Top

23 楼leizhengdeng(权为妞妞所用,利为妞妞所谋)回复于 2001-12-19 16:44:28 得分 0

to   :aauhii(菜鸟)   
   
  //4。从别的贴子上看到你说关于栈和堆地址范围的高见,不知那里看的,还是自己跟踪的,谢谢指教。  
  我自己跟踪的Top

24 楼leizhengdeng(权为妞妞所用,利为妞妞所谋)回复于 2001-12-19 16:48:12 得分 0

能给个具体的例子吗?  
  Top

25 楼aauhii(快秃顶了)回复于 2001-12-19 19:41:17 得分 0

说各位写了operate没有别的意思,只是刚学,以为有新的用法我上不知道,所以讨教的。  
  写错了,不是pass   by   reference   ,   我的意思是最好传回临时对象副本而不是引用。  
  是从Effective   C++   条款23看的,不只用的对不对。  
  Top

相关问题

  • 如何返回点击的对象名?
  • 如何在ATL com 中返回对象
  • 如何返回一个TD对象所在的TABLE对象?
  • DATAGRID绑定对象后如何返回对象?
  • 组件返回对象是如何实现的,比如 set obj=组件.方法 返回的值是个对象!
  • Servlet如何返回一个对象给JSP(No Session)?
  • 如何根据字符串中的内容返回对象?
  • 函数中是如何返回一个对象的,如localtime
  • COM+ 对象中如何写一个方法返回Recordset
  • 如何调用WebService返回的复杂对象中的方法

关键词

  • 函数
  • ctest
  • 构造函数
  • 对象
  • operator
  • cstring
  • 返回
  • const
  • add
  • 创建

得分解答快速导航

  • 帖主:leizhengdeng
  • lightning
  • LXJ2001
  • aauhii

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo