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

    class Sales_data{
        // 友元函数
        friend istream& operator >> (istream&, Sales_data&);
        friend ostream& operator << (ostream&, const Sales_data&);
        friend bool operator == (const Sales_data&, const Sales_data&);
    
    public:
        // 构造函数的三种形式
        Sales_data() = default;
        Sales_data(const string &book) : bookNo(book) { }
        Sales_data(istream &is) {is >> *this;}
    
        Sales_data& operator += (const Sales_data&);
        string isbn() const {return bookNo;}
        Sales_data &combine(const Sales_data &rhs);
        double avg_price() const;
    };
    

    isbn 函数的一个关键之处是紧随参数列表之后的 const 关键字,这里,const的作用是修改隐式 this指针的类型

    默认情况下,this 的类型是指向类类型非常量版本的常量指针

    例如在Sales_data成员函数中,this的类型是 Sales_data *const。尽管this是隐式的,但它仍然需要遵循初始化规则,意味着(在默认情况下)我们不能把this绑定到一个常量对象上。这一情况也就使得我们不能在一个常量对象上调用普通的成员函数。

    如果 isbn 是一个普通函数而且 this 是一个普通的指针参数,则我们应该把 this声明成const Sales_data *const。毕竟,在isbn的函数体内不会改变this所指的对象,所以把 this 设置为指向常量的指针有助于提高函数的灵活性。

    然而,this 是隐式的并且不会出现在参数列表中,所以在哪儿将 this 声明成指向常量的指针就成为我们必须面对的问题。C++语言的做法是允许把const关键字放在成员函数的参数列表之后,此时,紧跟在参数列表后面的 const 表示 this 是一个指向常量的指针。像这样使用 const 的成员函数被称作常量成员函数(const member function)。

    可以把isbn的函数体想象成如下形式:

    std::string Sales_data::isbn(const Sales_data *const this){
        return this -> isbn;
    }
    

    因为 this 是指向常量的指针,所以常量成员函数不能改变调用它的对象的内容。在上例中,isbn 可以读取调用它的对象的数据成员,但是不能写入新值。

  • 相关阅读:
    爬虫必备—性能相关(异步非阻塞)
    JPA自定义查询@Query分页
    iiview Select 选择框打勾选中的内容label和展示的不一致
    ivew Table 固定列设置后,底部拖拽的横轴被覆盖拉不动
    vue消息提示Message
    LeafLet之气泡框隐藏"x"图标
    vue 之 折线图挤压
    iView之清空选择框
    iview之select选择框选中内容后有空格的问题
    iview组件select之默认展示label,并传空value做方法入参
  • 原文地址:https://www.cnblogs.com/lihello/p/14379533.html
Copyright © 2011-2022 走看看