浅谈C++类(一)

类的基本思想是数据抽象

封装。数据抽象是一种依赖于接口实现分离的编程技术。

一、定义抽象数据类型

1、 设计Sale_data类

浅谈C++类(一)

a. 定义成员函数

如上图所示,成员函数体可以定义在类外,也可以定义在类内(isbn函数),isbn函数 如何获得bookNo成员所依赖的对象呢?

b. 引入this

调用isbn函数时,如:total.isbn(),当isbn返回bookNo时,实际上返回的是 total.bookNo。

成员函数通过一个名为this的额外的隐式参数来访问调用它的那个对象。

当调用total.isbn()时,则编译器将total的地址传递给隐式形参this

isbn函数可以写为std::string isbn() const {return this->bookNo}

this是一个常量指针。

c. 引入const成员函数

isbn中另一个关键是,紧随参数列表后的const关键字,这里const 的作用是

修改隐式this指针的类型。

默认情况下,this的类型是指向类类型的非常量的常量指针。即,在默认情况下我们不可以将this绑定到一个常量对象上。在isbn函数体内不会改变this所指的对象,所有将this 设置为指向常量的指针有助于提高函数的灵活性。因为this是指向常量的指针,所以常量成员函数不能改变调用它的对象的内容。

2、类的外部定义成员函数

浅谈C++类(一)

avg_price函数便是定义在了Sale_data类的外部。

在类外部定义成员函数,①成员函数的定义必须与类内的声明一致。②外部定义的成员函数必须包含它所属的类名。

函数名Sale_data::avg_price使用了作用域运算符,因此当avg_price使用revenue 和units_sold时,实际上隐式的使用了Sale_data的成员。

3、 定义一个返回this对象的函数

浅谈C++类(一)

当total.combine(trans)时,total 的地址绑定到this,trans的地址绑定到rhs。

当执行units_sold+=rhs.units_sold;语句时等同于:

求total.units_sold 和trans.units_sold的和,然后将结果保存到total.units_sold中。

Note:定义的函数类似于某个内置运算符时,应令该函数的行为尽量模仿这个运算符,内置的赋值运算符把它的左侧运算对象当作左值返回。

因为此时的左侧运算对象为Sale_data的对象,所以返回类型为Sale_data&。

return *this;返回total 的引用。


分享到:


相關文章: