第七章 类

7.1定义抽象数据类型

        类的基本思想是数据抽象封装。数据抽象是一种依赖于接口和实现分离的编程。接口:用户能执行的操作。实现:类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。

        类的成员函数的声明必须在类的内部,它的定义即可在类内,也可在类的外部

1.this:隐式调用,是成员函数的隐式形参。用调用成员函数的对象的地址初始化this。所以this是一个常量指针,不允许改变this中保存的地址。

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

2.const成员函数(常量成员函数)

作用:
  1. 表示该函数可以被常量对象调用, 例如 const ClassA a; a.fun()   常量对象只能调用使用const的函数
  2. 表示该函数可以操作成员,但不可以修改数据成员的内容。 假设在fun中 给成员变量赋值,则会出错。

关于Const函数的几点规则:
a.在类中被const声明的成员函数只能访问const成员函数,而非const函数可以访问任意的成员函数,包括const成员函数.
b.在类中被const声明的成员函数不可以修改对象的数据,不管对象是否具有const性质.它在编译时,以是否修改成员数据为依据,进行检查.

c加上mutable修饰符的数据成员,对于任何情况下通过任何手段都可修改,自然此时的const成员函数是可以修改它的

3.类的编译:分为两步,首先编译成员的声明,然后是成员函数体。因此,成员函数体可以随意使用类中的其他成员,无须在意成员出现的次序。

4.内置的赋值运算符把它的左侧运算对象当成左值返回,因此当我们定义的函数类似于某个内置运算符时,函数必须返回引用类型。renturn *this;

5.如果非成员函数是类接口的组成部分,则这些函数的声明应该与类在同一个头文件中。

6.构造函数:初始化类对象的数据成员。构造函数的名字和类名相同,没有返回类型;类可以有很多个构造函数;不能被声明为const的;构造函数在const对象的构造过程中可以向它写值(直到构造函数初始化完成,对象才能真正取得“常量”属性)。

Sales_data(const std::string &s):bookNo(s),units_sold(n){}  构造函数初始值列表,当某个数据成员被构造函数初始值列表忽略时,它将以与合成默认构造函数相同的方式隐式初始化。

7.默认构造函数(编译器创建的构造的函数叫合成的默认构造函数):只有当类没有声明任何构造函数时,编译器才会自动地生成默认构造函数。一旦我们定义了一些其他的构造函数,除非我们再定义一个默认的构造函数,否则类将没有默认构造函数。默认构造函数没有实参。通过在参数列表后面写上=default来要求编译器生成默认构造函数。如果=default和声明一起出现在类的内部,则默认构造函数是内联的;如果在类的外部,则该成员在默认情况下不是内联的。

8.拷贝、合成、析构:当类需要分配类对象之外的资源时,合成版本常常会失效。比如:管理动态内存的类通常不能依赖于上述操作的合成版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值