WEB开发网
开发学院软件开发VC const传奇 阅读

const传奇

 2007-03-16 21:56:40 来源:WEB开发网   
核心提示: 声明成员函数时,末尾加const修饰,const传奇(3),表示在成员函数内不得改变该对象的任何数据,这种模式常被用来表示对象数据只读的访问模式,这种用法常用来重载操作符,String类的operator[]是个很好的例子,例如:class MyClass{char *str ="

声明成员函数时,末尾加const修饰,表示在成员函数内不得改变该对象的任何数据。这种模式常被用来表示对象数据只读的访问模式。例如:class MyClass
{
  char *str ="Hello, World";
  MyClass()
  {
    //void constructor
  }
  
  ~MyClass()
  {
    //destructor
  }
  char ValueAt(int pos) const  //const method is an accessor method
  {
    if(pos >= 12)
        return 0;
    *str = ''M'';      //错误,不得修改该对象
    return str[pos];    //return the value at position pos
  }
}
Const和重载

重载函数的时候也可以使用const,考虑下面的代码:class MyClass
{
  char *str ="Hello, World";
  MyClass()
  {
    //void constructor
  }
  
  ~MyClass()
  {
    //destructor
  }
  char ValueAt(int pos) const  //const method is an accessor method
  {
    if(pos >= 12)
        return 0;
    return str[pos];  //return the value at position pos
  }
  
  char& ValueAt(int pos)    //通过返回引用设置内存内容
  {
    if(pos >= 12)
        return NULL;
    return str[pos];
  }
}

在上面的例子中,ValueAt是被重载的。Const实际上是函数参数的一部分,在第一个成员函数中它限制这个函数不能改变对象的数据,而第二个则没有。这个例子只是用来说明const可以用来重载函数,没有什么实用意义。

实际上我们需要一个新版本的GetValue。如果GetValue被用在operator=的右边,它就会充当一个变量;如果GetValue被用作一元操作符,那么返回的引用可以被修改。这种用法常用来重载操作符。String类的operator[]是个很好的例子。(这一段译得很烂,原文如下:In reality due to the beauty of references just the second definition of GetValue is actually required. If the GetValue method is used on the the right side of an = operator then it will act as an accessor, while if it is used as an l-value (left hand side value) then the returned reference will be modified and the method will be used as setter. This is frequently done when overloading operators. The [] operator in String classes is a good example.)

上一页  1 2 3 4  下一页

Tags:const 传奇

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接