新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 C/C++编程思想 』 → 使用C++时应注意的几个小问题[转帖] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 4523 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 使用C++时应注意的几个小问题[转帖] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     longshentailang 帅哥哟,离线,有人找我吗?
      
      
      威望:1
      等级:计算机学士学位
      文章:325
      积分:2990
      门派:XML.ORG.CN
      注册:2006/6/20

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给longshentailang发送一个短消息 把longshentailang加入好友 查看longshentailang的个人资料 搜索longshentailang在『 C/C++编程思想 』的所有贴子 引用回复这个贴子 回复这个贴子 查看longshentailang的博客楼主
    发贴心情 使用C++时应注意的几个小问题[转帖]


    关键字class与struct差别:

    我们知道在C++中定义类,关键字class和struct是等效的,但是在类定义中采用默认访问权限的方式声明成员函数/变量时,你会发现两者还是有所差别的,如下表:


       默认访问权限
    使用class定义类  private
    使用struct定义类  public

    关键字mutable的用法:

    mutable关键字似乎并不被经常使用,笔者也是在无意间才知道的,下面说一下它的用法。

    mutable的作用是用来修饰类的成员变量,使这个成员变量的值在任何情况下都可以被修改,例如:

    为叙述方便,预定义一个类TObject,如下:

    class TObject
    {
      int iValue;
    };

    情况1:

    我们知道,若TObject中存在一个成员函数,并且次函数的声明末尾加上了const关键字,形式如下:

    void setValue(int) const;  // 注:有些地方把这种函数称为常函数。

    那么这就意味着,这个函数的实现中不能修改该类的成员变量的值,但是,倘若我们要记录这个函数调用的次数,我们会有很多方法,如间接调用该函数,但是这显然不是一个好方法,这会增加类的复杂度。这个时候mutable就派上用场了,它可以使被修饰的成员变量在该种情况下被改变,你可以这样书写代码:

    class TObject
    {
      mutable int iValue;
    public:
      void setValue(int pValue) const
      {
        iValue++;
      }
    };

    当然,这并不是一个好例子,因为它没有多少实用价值,我的目的在于说明问题。

    情况2:

    若有一个TObject的实例被定义为常量,如:

    const TObject tObject; // 注:有些地方将之称为常对象。

    如果没有mutable的话,这显然意味着你将无法修改该对象,那么,如果你只希望关闭掉部分成员变量的修改权,那么你就应该像情况1那么书写代码,让你调用setValue成员函数时仍能修改iValue的值。

    关键字static在类成员函数/变量中的使用方法:

    修饰成员变量,示例代码如下:

    class TObject
    {
    public:
      static int iValue;
      void setValue(int);
    };

    其中iValue被声明为静态成员变量,这就意味着这个变量被所有这个类的实例所共享,并且不能被非static修饰的成员函数修改,对此例来讲, setValue(int)是不能修改iValue的值的,对静态变量初始化也需要特殊的语法,对此例要在源文件(*.cpp)中这么写:

    int TObject::iValue = 0;

    调用方法有两种:

    int iValue = TObject::iValue;

    TObject tObj;
    int iValue = tObj.iValue;

    修饰成员函数,示例代码如下:

    class TObject
    {
    public:
      static void SetValue(TObject&);
    };

    这个函数既可以修改该类的静态变量,也可以修改普通变量,但是需要格外注意的是,在这个函数的实现中不能出现this关键字,因为它不对类的实例作用。

    调用方法有两种:

    TObject::SetValue(*new TObject);

    TObject tObj;
    tObj.SetValue(*new TObject);


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/3/9 17:19:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/10 8:51:49

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    611.328ms