C++中的类定义
类的基本思想是数据抽象和封装,数据抽象是一种依赖接口和实现分离的编程技术。
类的接口包括用户所能执行的操作;类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。
封装实现了类的接口和实现的分离封装后的类隐藏了它的实现细节。
定义抽象数据类型
引入this
成员函数通过一个名未this的额外隐式参数访问调用它的那个对象,当我们调用一个成员函数的时候,用请求该函数的对象地址初始化this,
例如:total.isbn() 成员函数通过一个名为this.total的额外隐式参数来访问调用它的那个对象,当我们调用一个成员函数时,用请求该函数的对象地址初始化this,
调用total.isbn() 编译器负责把total的地址传给isbn的隐式形参this,可以等价的认为编译器将该调用写成了 Sales_data :isbn(&total), 调用Sales_data的isbn成员时传入了total的地址
【Sales_data是类】
引入const成员函数
使用const的成员函数被称作常量成员函数。
常量对象,以及常量对象的引用或指针都只能调用常量成员函数。
类作用域和成员函数
类本身就是一个作用域。成员函数定义嵌套在其之内。
在类的外部定义成员函数
成员名字需包含所属类名。
定义类相关的非成员函数
构造函数
控制对象的初始化过程的函数叫构造函数。
构造函数不能被声明为const。
类通过一个特殊的构造函数来控制摸摸人初始化过程,这个函数叫做默认构造函数。默认构造函数无须任何实参。
编译器创建的构造函数又被成为合成的默认构造函数。
某些类不能遗留合成的默认构造函数
notes: 只有当类没有声明任何构造函数时,便要一起才回自动的生成默认构造函数。
notes2:如果类包含有内置类型或者复合类型的成员,则只有当这些成员全都被赋予了类内的初始值时,这个类才适合于使用合成的默认构造函数。
=default的含义
在c++11新标准中,若需要默认行为,可以通过在参数列表后面写上 =default来要求编译器生成构造函数。
如: Sales_data() = default;
构造函数初始化列表
notes: 构造函数不应该轻易覆盖掉类内的初始值,除非新赋的值与原值不同,如果不能使用类内初始值,则所有构造函数都应该显式地初始化每个内置类型的成员。
在类的外部定义构造函数
和在类外部定义成员函数相类似。
拷贝、赋值和析构