设为首页 加入收藏

TOP

C++的const类成员函数(一)
2014-04-06 17:36:12 来源: 作者: 【 】 浏览:234
Tags:const 成员 函数

  我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误。例如:

  const char blank = '';

  blank = '\n';  // 错误

  面向对象程序设计中,为了体现封装性,通常不允许直接修改类对象的数据成员。若要修改类对象,应调用公有成员函数来完成。为了保证const对象的常量性,编译器须区分不安全安全的成员函数(即区分试图修改类对象与不修改类对象的函数)。例如:

  const Screen blankScreen;

  blankScreen.display();   // 对象的读操作

  blankScreen.set('*');    // 错误:const类对象不允许修改

  在C++中,只有被声明为const的成员函数才能被一个const类对象调用。

  要声明一个const类型的类成员函数,只需要在成员函数参数列表后加上关键字const,例如:

  class Screen {

  public:

  char get() const;

  };

  在类体之外定义const成员函数时,还必须加上const关键字,例如:

  char Screen::get() const {

  return _screen[_cursor];

  }

  若将成员成员函数声明为const,则该函数不允许修改类的数据成员。例如:

  class Screen {

  public:

  int ok() const {return _cursor; }

  int error(intival) const { _cursor = ival; }

  };

  在上面成员函数的定义中,ok()的定义是合法的,error()的定义则非法。

  值得注意的是,把一个成员函数声明为const可以保证这个成员函数不修改数据成员,但是,如果据成员是指针,则const成员函数并不能保证不修改指针指向的对象,编译器不会把这种修改检测为错误。例如:

  class Name {

  public:

  void setName(const string &s) const;

  private:

  char *m_sName;

  };

  void setName(const string &s) const {

  m_sName = s.c_str();      // 错误!不能修改m_sName;

  for (int i = 0; i < s.size(); ++i)

  m_sName[i] = s[i];    // 不好的风格,但不是错误的

  }

  虽然m_Name不能被修改,但m_sName是char *类型,const成员函数可以修改其所指向的字符。

  const成员函数可以被具有相同参数列表的非const成员函数重载,例如:

  class Screen {

  public:

  char get(int x,int y);

  char get(int x,int y) const;

  };

   

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇c语言的字符串分解——strtok函数.. 下一篇C++非类型模板参数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C语言指针从入门到基 (2025-12-26 05:21:36)
·【C语言指针初阶】C (2025-12-26 05:21:33)
·C语言指针的定义和使 (2025-12-26 05:21:31)
·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)