C++ const 成员函数详解

原创|其它|编辑:郝浩|2010-02-23 10:38:40.000|阅读 1016 次

概述:一些成员函数改变对象,一些成员函数不改变对象。本文将为您介绍C++ const 成员函数的一些相关内容。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

     一些成员函数改变对象,一些成员函数不改变对象。

  例如:


 int Point::GetY()
  {
  return yVal;
  }

  这个函数被调用时,不改变Point对象,而下面的函数改变Point对象:


  void Point:: SetPt (int x, int y)
  {
  xVal=x;
  yVal=y;
  }

  为了使成员函数的意义更加清楚,我们可在不改变对象的成员函数的函数原型中加上const说明:


 class Point
  {
  public:
  int GetX() const;
  int GetY() const;
  void SetPt (int, int);
  void OffsetPt (int, int);
  private:
  int xVal, yVal;
  };

  const成员函数应该在函数原型说明和函数定义中都增加const限定:


 int Point::GetY() const
  {
  return yVal;
  }
  class Set {
  public:
  Set (void){ card = 0; }
  bool Member(const int) const;
  void AddElem(const int);
  //...
  };
  bool Set::Member (const int elem) const
  {
  //...
  }

  非常量成员函数不能被常量成员对象调用,因为它可能企图修改常量的数据成员:


  const Set s;
  s.AddElem(10); // 非法: AddElem不是常量成员函数
  s.Member(10); // 正确

  但构造函数和析构函数对这个规则例外,它们从不定义为常量成员,但可被常量对象调用(被自动调用)。它们也能给常量的数据成员赋值,除非数据成员本身是常量。

  为什么需要const成员函数?

  我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数是"只读"函数,而有一些函数要修改类数据成员的值。如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。其实,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。

     一些成员函数改变对象,一些成员函数不改变对象。

  例如:


 int Point::GetY()
  {
  return yVal;
  }

  这个函数被调用时,不改变Point对象,而下面的函数改变Point对象:


  void Point:: SetPt (int x, int y)
  {
  xVal=x;
  yVal=y;
  }

  为了使成员函数的意义更加清楚,我们可在不改变对象的成员函数的函数原型中加上const说明:


 class Point
  {
  public:
  int GetX() const;
  int GetY() const;
  void SetPt (int, int);
  void OffsetPt (int, int);
  private:
  int xVal, yVal;
  };

  const成员函数应该在函数原型说明和函数定义中都增加const限定:

 


 int Point::GetY() const
  {
  return yVal;
  }
  class Set {
  public:
  Set (void){ card = 0; }
  bool Member(const int) const;
  void AddElem(const int);
  //...
  };
  bool Set::Member (const int elem) const
  {
  //...
  }

  非常量成员函数不能被常量成员对象调用,因为它可能企图修改常量的数据成员:


  const Set s;
  s.AddElem(10); // 非法: AddElem不是常量成员函数
  s.Member(10); // 正确

  但构造函数和析构函数对这个规则例外,它们从不定义为常量成员,但可被常量对象调用(被自动调用)。它们也能给常量的数据成员赋值,除非数据成员本身是常量。

  为什么需要const成员函数?

  我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数是"只读"函数,而有一些函数要修改类数据成员的值。如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。其实,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP