C++primer学习笔记-----7.1定义抽象数据类型

【累的基本思想是数据抽象和封装。数据抽象是一种依赖于接口和实现分离的编程技术;封装实现了类的接口和实现的分离。】


【对于非抽象数据类型来说,其用户直接访问它的数据成员并编写自己所需的操作是允许的;

要想把它变成抽象数据类型,我们需要定义一些操作以供它的用户使用,一旦它定义了自己的操作,我们就可以封装(隐藏)它的数据成员了。】


7.1.1 设计Sales_data 类


【类的接口有的作为成员函数,有的作为普通函数, 哪些函数应该作为普通函数定义将在14.1 节介绍。】


【在一些简单的应用程序中,类的用户和类的设计者常常是同一个人。尽管如此,还是最好把角色区分开来。
当我们设计类的接口时,应该考虑如何才能使得类易于使用;而当我们使用类时,不应该顾及类的实现机理。】

7.1.2 定义改进的Sales_data 类


【如果某个函数的目的并非通用,它在逻辑上应该属于类的实现的一部分,而非接口的一部分。】

【定义和声明成员函数的方式与普通函数差不多。成员函数的声明必须在类的内部,它的定义则既可以在类的内部也可以在类的外部。
定义在类内部的函数是隐式的inline 函数,编译器会尝试着将该函数在调用点上内联地展开。】

对成员函数的调用和该函数获得类内数据的方式
成员函数被调用时,通过一个名为this 的额外的隐式参数来访问调用它的那个对象。当我们调用成员函数时,我们使用调用该函数的对象的地址来初始化this。
total.isbn(); // total 是一个Sales_data 类型的对象,我们调用其成员函数isbn;
Sales_data::isbn(&total); // 这种伪码说明了编译器处理成员函数的实际执行过程,也表明了编译器处理成员函数与处理普通的函数时的联系

由此,在成员函数内部, 我们可以直接使用调用该函数的对象的其他成员而无须使用成员访问运算符;因为通过this 已经指向了该对象,所以任何对类成员的直接访问都被看作this 的隐式引用。
{return bookNo};
{return this -> bookNo}; // 说明了直接调用该对象其他成员时实际执行的过程
任何新自定义名为this 的参数或变量的行为都是非法的;尽管没有必要,我们还是可以在成员函数体内使用this】

【调用成员函数时, 在形参列表之后紧随const 关键字,可以把隐式指针this 的类型声明为底层const 类型。(默认情况下this 是指向类类型非常量版本的常量指针)
这种声明有助于提升函数的灵活性】

7.1.3 定义类相关的非成员函数


【类的作者常常需要定义一些辅助函数,尽管 这些函数定义的操作从概念上来说属于类的接口的组成部分,但它们实际上并不属于类本身
如果函数在概念上属于类但是不定义在类中,则它一般应与类声明放在同一个头文件中,在这种方式下,用户使用接口的任何部分都只需要引入一个文件。】

7.1.4 构造函数



你可能感兴趣的:(C++primer)