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

《THINKING IN C++》里面一个习题,关于重载运算符的

楼主angelanpan()2004-12-01 18:51:05 在 C/C++ / C++ 语言 提问

 
    写一个包含string和static   int成员的类Bird。在预设的构造函数中,根据类的名字(Bird   #1,Bird   #2等等),使用int成员自动地生成一个置于string中的标志符。为ostream增加operator<<以打印Bird对象。写一个赋值operator=和一个拷贝构造函数。在main中验证他们都可以正确运行。  
   
    对于这个题目,对“使用int成员自动地生成一个置于string中的标志符”这句话的实现不太会,还请高手指点。 问题点数:15、回复次数:12Top

1 楼hxblvc(还是好好学吧...)回复于 2004-12-01 18:58:28 得分 0

构造出一个Bird.   static   int   成员进行自加1运算.   不就可以得到一个标志符.Top

2 楼hxblvc(还是好好学吧...)回复于 2004-12-01 19:00:52 得分 0

上边少写一个字:  
  每构造出一个Bird.   static   int   成员进行自加1运算.   不就可以得到一个标志符.  
   
  ,标志符目的应该是和其它的Bird对象进行区分吧.Top

3 楼angelanpan()回复于 2004-12-01 19:16:26 得分 0

 
      置于string中怎么理解?  
      如果只是对bird对象进行区分的话,string也就够了。而且static是所有的bird对象共享的,不能区分对象的啊?  
   
      反正我对这个题目意思都不是太明白。翻译好象有些难理解!Top

4 楼questionboy(我行我素)回复于 2004-12-01 19:39:09 得分 12

是不是這個意思  
   
  #include   <iostream>  
  #include   <tchar>  
   
  class   CBird  
  {  
  public:  
  CBird()  
  {  
  ++m_nCount;  
  TCHAR   ch[64];  
  stprintf(   ch,   TEXT("Bird   #%d"),   m_nCount     );  
  m_stName   =   ch;  
  }  
  CBird(   const   CBird&   bd   )  
  {  
  operator   =   (   bd   );  
  }  
  private:  
  static   int   m_nCount;  
  std::string   m_stName;  
   
  public:  
  std::ostream&   operator   <<(   std::ostream&   o   )  
  {  
  o<<m_stName<<std::endl;  
  return   o;  
  }  
  const   CBird&   operator   =   (   const   CBird&   bd   )  
  {  
  m_stName   =   bd.m_stName;  
  return   *this;  
  }  
  };  
   
  int   CBird::m_nCount   =   0;  
   
  在拷貝和付值操作中我沒有遞增引用記數,是因為不知道題目的確切要求,你自己可以更改,但是我想大概的意思是這樣的,沒有編譯測試,自己略微改一下吧  
  Top

5 楼angelanpan()回复于 2004-12-01 20:02:03 得分 0

can   not   open   file   "tchar"  
  tchar   是个什么样的文件?Top

6 楼questionboy(我行我素)回复于 2004-12-02 08:35:24 得分 0

哈哈,我好意思,應該是<tchar.h>,說起來比較麻煩,主要是為了針對UNICODE和非UNICODE環境,所以我是用了TCHAR,你也可以把這個部分改為char,只要你自己確定自己程序的使用範圍就好了Top

7 楼angelanpan()回复于 2004-12-02 22:49:51 得分 0

还是不行啊,虽然好象能找到tchar这个文件,但是还是有两个错误啊!  
  error   C2065:   'stprintf'   :   undeclared   identifier  
  error   C2065:   'TEXT'   :   undeclared   identifier  
  请问这两个分别是什么作用?Top

8 楼angelanpan()回复于 2004-12-02 22:56:09 得分 0

我想这正是我需要的  
  是不是把"Bird   #%d"写入ch里面去,正应该是这样区分bird对象!  
  但是找不到stprintf和text怎么办?Top

9 楼alanzhu(爱的逃兵)回复于 2004-12-03 09:14:43 得分 3

<wchar.h>,应该是这个,而且应是swprintfTop

10 楼alanzhu(爱的逃兵)回复于 2004-12-03 09:17:17 得分 0

TEXT("")改成L""Top

11 楼questionboy(我行我素)回复于 2004-12-03 09:25:41 得分 0

呵呵說來話長,你這樣吧,把這部分改掉,這樣應該可以運行  
  TCHAR   ch[64];  
  stprintf(   ch,   TEXT("Bird   #%d"),   m_nCount     );  
  改成  
  char   ch[64];  
  sprintf(   ch,   "Bird   #%d",   m_nCount     );  
  解釋起來很複雜,你看看有關UNICODE編程方面的书吧,最簡單的說法就是,使用TCHAR和TEXT可以隨著編譯環境是否UNICODE而自動調用相關的函數,其定義大概如下,如果一時不懂就算了,以後會懂的  
  #ifdef   UNICODE  
  typedef   wchar_t   TCHAR  
  #else  
  typedef   char   TCHAR  
  #endifTop

12 楼alanzhu(爱的逃兵)回复于 2004-12-03 09:26:09 得分 0

示例  
  #include   <stdio.h>  
  #include   <wchar.h>  
   
  void   main()  
  {  
  wchar_t   ch[64];  
  swprintf(   ch,   L"Bird   #%d",   3     );  
  wprintf(ch);  
  }  
  Top

相关问题

  • 在Dev-C++重载运算符问题
  • 重载运算符
  • 关于C++中运算符重载的问题
  • Delphi能象C++一样重载运算符吗?
  • String的+是不是像c++一样重载运算符?
  • 关于C++运算符重载的问题????
  • c++运算符重载问题,调试出错
  • C++运算符重载的一个问题
  • C++运算符重载的一个问题
  • 关于C++中类的运算符重载的问题

关键词

  • unicode
  • cbird
  • bird
  • stprintf
  • tchar
  • ncount
  • ch
  • 使用
  • operator
  • include

得分解答快速导航

  • 帖主:angelanpan
  • questionboy
  • alanzhu

相关链接

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

广告也精彩

反馈

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