定义成员函数
isbn 函数的参数列表为空,返回值是一个 string 对象:
string isbn() const {return bookNo;}
引入 this
对 isbn 的成员函数的调用:
total.isbn()
成员函数通过一个名为 this 的额外的隐式参数来访问调用它的那个对象。调用一个成员函数时,用请求该函数的对象地址初始化 this 。
编译器负责把 total 的地址传递给 isbn 的隐式形参 this ,可以等价地认为编译器将该调用重写了如下的形式:
//伪代码,用于说明调用成员函数的实际执行过程 Sales_data::isbn(&total)
调用 Sales_data 的 isbn 成员时传入了 total 的地址。
因为 this 的目的总是指向“这个”对象,所以 this 是一个常量指针,不允许改变 this 中保存的地址。
引入 const 成员函数
isbn 函数紧随参数列表之后的 const 关键字,const 的作用是修改隐式 this 指针的类型。
常量成员函数:把 const 关键字放在成员函数的参数列表之后,const 表示 this 是一个指向常量的指针。
可以把 isbn 函数想象成如下的形式:
//伪代码,说明隐式地this指针是如何使用的 //下面的代码是非法的:因为我们不能显式地定义自己的this指针 //谨记此处的this是一个指向常量的指针,因为isbn是一个常量成员 std::string Sales_data::isbn(const Sales_data * const this) {return this->isbn;}
因为 this 是指向常量的指针,所以常量成员函数不能改变调用它的对象的内容。isbn 可以读取调用它的对象的数据成员,但是不能写入新值。
类作用域和成员函数
类本身就是一个作用域。类的成员函数的定义嵌套在类的作用域之内。
编译器分两步处理类:首先编译成员的声明,然后才轮到成员函数体。成员函数体可以随意使用类中的其他成员而无须在意这些成员出现的次序。
在类的外部定义成员函数

浙公网安备 33010602011771号