zoukankan      html  css  js  c++  java
  • const 成员函数

    在解释跟在形参表后面的 const 之前,必须先说明成员函数是如何定义的:

    类的成员函数既可以在类的定义内也可以在类的定义外定义。

    编译器隐式地将在类内定义的成员函数当作内联函数

    调用成员函数时,实际上是使用对象来调用的。

    每个成员函数(除了static 成员函数外,static 成员是类的组成部分但不是任何对象的组成部分,因此,static 成员函数没有 this 指针。通过使用非 static 成员显式或隐式地引用 this 是一个编译时错误。)都有一个额外的、隐含的形参 this。在调用成员函数时,形参 this 初始化为调用函数的对象的地址。

    const 成员函数的引入

     1 class Sales_item {
     2 public:
     3 // operations on Sales_item objects
     4 double avg_price() const;
     5 bool same_isbn(const Sales_item &rhs) const
     6 { return isbn == rhs.isbn; }
     7 // private members as before
     8 private:
     9 std::string isbn;
    10 unsigned units_sold;
    11 double revenue;
    12 };

    为了理解成员函数的调用,可考虑下面的语句:
    total.same_isbn(trans);
    就如编译器这样重写这个函数调用:
    // pseudo-code illustration of how a call to a member function is translated
    Sales_item::same_isbn(&total, trans);
    在这个调用中,函数 same_isbn 中的数据成员 isbn 属于对象 total。

    跟在 Sales_item 成员函数声明的形参表后面的 const 所起的作用:const 改变了隐含的 this 形参的类型

    在调用
    total.same_isbn(trans) 时,隐含的 this 形参将是一个指向 total 对象的const Sales_Item* 类型的指针。

    bool Sales_item::same_isbn(const Sales_item *const this,
    const Sales_item &rhs) const
    { return (this->isbn == rhs.isbn); }

    用这种方式使用 const 的函数称为常量成员函数。由于 this 是指向 const 对
    象的指针,const 成员函数不能修改调用该函数的对象

    因此,函数 avg_price和函数 same_isbn 只能读取而不能修改调用它们的对象的数据成员

    const 对象、指向 const 对象的指针或引用只能用于调用其const 成员函数,如果尝试用它们来调用非 const 成员函数,则是错误的。


  • 相关阅读:
    C#生成图形验证码
    飞刀软件官网正式开通
    IIS7或者IIS7.5部署MVC项目时出现404错误
    office编程必不可少 [转]
    C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站
    console方便用法
    24个解决实际问题的ES6代码段
    遍历对象的属性和对象的值
    前端图片处理
    Vue团队代码规范
  • 原文地址:https://www.cnblogs.com/zhaobinyouth/p/6268590.html
Copyright © 2011-2022 走看看