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

c++类型转换问题and 一个看不懂的problem

楼主jammes(睡)2002-05-16 09:45:29 在 C/C++ / C语言 提问

1)operator   char*()   const{return   s;}  
  其中s是自定义的一个string类中的char*   s;  
  对这行代码的解释是对char*   类型的转换意味着在任何需要char*的地方都可以使用一个  
  string对象。//请问这句话怎么理解。  
   
  2)有一个这样的:  
  #define   CLASS(ID)   class   ID{\  
  public:\  
            ID(int)(out<<#ID"constructor\n";}\  
            ~ID(){out<<#ID"destructor\n";}\  
  };  
  请问这里面的\和#(#ID)分别代表什么意思?  
  问题点数:20、回复次数:7Top

1 楼kof99th(小虫)回复于 2002-05-16 09:53:32 得分 3

1。当需要一char*对象的时候你用一个string   对象,编译器会调用operator   char*()进行隐式转换,使类型匹配。  
  2。\是续行符,‘#’不清楚,好象是把两个字符串连接在一起。Top

2 楼blactte(想认识我吗?在靠近一点!)回复于 2002-05-16 10:05:13 得分 0

1:operator   char*()   const{return   s;}  
  这是运算符重载.也就是说  
  如果定义  
  String   str;  
  char   *ch;  
  str=ch;//String类定义的赋值重载运算符可以将char*   转化成String  
  ch=str;//char没有定义赋值重载运算符不能转换,但是定义了operator   char*()   const{return   s;}这里首先将str转换成char*,再赋值.  
  2:  
    #define   CLASS(ID)   class   ID  
    {  
    public:  
                ID(int)(cout<<"#IDconstructor\n";}  
                ~ID(){cout<<"#IDdestructor\n";}  
  };  
  这个代码是那里的?  
  我只能将上述代码这么理解.  
   
   
   
   
   
   
  Top

3 楼blactte(想认识我吗?在靠近一点!)回复于 2002-05-16 10:05:55 得分 6

1:operator   char*()   const{return   s;}  
  这是运算符重载.也就是说  
  如果定义  
  String   str;  
  char   *ch;  
  str=ch;//String类定义的赋值重载运算符可以将char*   转化成String  
  ch=str;//char没有定义赋值重载运算符不能转换,但是定义了operator   char*()   const{return   s;}这里首先将str转换成char*,再赋值.  
  2:  
    #define   CLASS(ID)   class   ID  
    {  
    public:  
                ID(int)(cout<<"#IDconstructor\n";}  
                ~ID(){cout<<"#IDdestructor\n";}  
  };  
  这个代码是那里的?  
  我只能将上述代码这么理解.  
   
   
   
   
   
   
  Top

4 楼fengye()回复于 2002-05-16 10:08:41 得分 1

#ID   means   the   literal   string   of   ID  
   
  #define   I(ID)   int   ID  
  #define   P(ID)   printf(#ID)  
   
  A(a);  
  P(a);  
   
  is   expand   to:  
   
  int   a;  
  printf("a");Top

5 楼freezingfire(让美梦来得更猛烈些吧)回复于 2002-05-16 10:11:36 得分 2

带'#'就代表好像变量一样,实际运算时会进行替换,#ID就代表实际运算的时候会用ID的值来代替#ID。Top

6 楼fengye()回复于 2002-05-16 10:12:55 得分 1

in   your   example,   if   you   write   CLASS(MyClass),   then  
  ID   is   MyClass  
  #ID   is   "MyClass"  
   
  #ID"destructor\n"   is   "MyClass""destructor\n"   which   will   be   concatenated   to   "MyClassdestructor\n"  
  Top

7 楼tiger_net()回复于 2002-05-16 16:58:05 得分 3

1.   是操作符重载.   一个例子.  
   
  CString   objS   =   "123456";  
  char*   pS;  
   
  pS   =   (char   *)   objS;  
   
  重载的目的就是让这样的操作也可以.  
   
  2.   MSDN例子,看了就明白了,   还有#@     ##   ,   #@是用'   '   括起来,   ##是把两个参数连起来.  
  #define   stringer(   x   )   printf(   #x   "\n"   )  
   
  void   main()  
  {  
          stringer(   In   quotes   in   the   printf   function   call\n   );    
          stringer(   "In   quotes   when   printed   to   the   screen"\n   );        
          stringer(   "This:   \"     prints   an   escaped   double   quote"   );  
  }  
   
  Such   invocations   would   be   expanded   during   preprocessing,   producing   the   following   code:  
   
  void   main()  
  {  
        printf(   "In   quotes   in   the   printf   function   call\n"   "\n"   );  
        printf(   "\"In   quotes   when   printed   to   the   screen\"\n"   "\n"   );  
        printf(   "\"This:   \\\"   prints   an   escaped   double   quote\""   "\n"   );  
  }  
   
  When   the   program   is   run,   screen   output   for   each   line   is   as   follows:  
   
  In   quotes   in   the   printf   function   call  
   
  "In   quotes   when   printed   to   the   screen"  
   
  "This:   \"   prints   an   escaped   double   quotation   mark  
  Top

8 楼lanzhengpeng2(兰征鹏)回复于 2002-05-17 10:03:17 得分 4

#ID将传入的宏变量转化为字符串。  
  define   CLASS(ID)   class   ID{\  
  public:\  
            ID(int)(out<<#ID"constructor\n";}\  
            ~ID(){out<<#ID"destructor\n";}\  
  };  
  Exmple:  
  CLASS(Test)成为:  
  class   Test  
  {  
  public:  
  Test(int){cout   <<   "Test""constructor\n';}  
  ~Test(){cout   <<   "Test""destructor\n";}  
  };  
  ##是连接符号  
  #define   LINK(a,b)   a##b  
  LINK(Test,Test)成为TestTestTop

相关问题

  • C#类型转换
  • C++类型转换
  • c类型转换为c#
  • c类型转换为c#
  • 类型转换:《Thinking in C++》
  • C#类型转换问题!!!
  • C++数据类型转换
  • C#中的类型转换
  • 数据类型转换(C++/PB)
  • c中类型转换问题

关键词

  • 类型
  • char

得分解答快速导航

  • 帖主:jammes
  • kof99th
  • blactte
  • fengye
  • freezingfire
  • fengye
  • tiger_net
  • lanzhengpeng2

相关链接

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

广告也精彩

反馈

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