类背后蕴含的基本思想是数据抽象和封装。他们可以提供两个优点:1.避免类内部出现无意的、可能破坏对象形态的用户级错误。2.随时间推移可以根据需求改变或缺陷报告来完善类实现,而无须改变用户级代码。
可以通过typedef,使用类型别名来简化类
在声明之后、定义之前的类是不完全类型,而创建类的对象之前,必须完整地定义该类。
显式引用this指针的必须情况:当需要将一个对象作为整体引用而不是引用对象的一个成员时。
某种类可能具有某些操作,应该返回引用,逻辑上可以添加下列操作:
1.一对set操作,将特定字符或光标指向的字符设置为给定值
2.一个move操作,给定两个index值,将光标移至新位置。
在调用move和set操作时,必须返回一个引用,一般返回this指针可以通过对其进行解引用访问this指向的对象。
在普通的非const成员函数中,this的类型是一个指向类类型的const指针。可以改变this所指向的值,但不能改变this所保存的地址。在const成员函数中,this的类型是一个指向const类类型对象的const指针。既不能改变this所指向的对象,也不能改变this保存的地址。
可变数据成员:有时(但不是很经常),我们希望类的数据成员(甚至在const成员函数内)可以修改。这可以通过声明为mutable来实现。
可变数据成员永远都不能为const。
在类作用域之外,成员只能通过对象或指针分别使用成员访问操作符"."或"->“来访问。
名字查找的步骤:
1.类成员声明的名字查找
2.类成员定义中的名字查找
3.类成员遵循常规的块作用域名字查找
4.函数作用域之后,在类作用域中查找
5.类作用域之后,在外围作用域中查找
6.在文件中名字的出现处确定名字
又一次出现构造函数。只要创建类类型的对象,都要执行构造函数。
一个类哪怕只定义了一个构造函数,编译器也不会再生成默认构造函数。合成的默认构造函数使用与变量初始化相同的规则来初始化成员。
类通常应定义一个默认构造函数
抑制由构造函数定义的隐式转换,为转换而显式地使用构造函数
友元(friend)机制允许一个类将对其非公有成员的访问权授予指定的函数或类。
可以设置某个类为友元,也可以设置某个类的特定成员为友元
static成员是类的组成部分但不是任何对象的组成部分,因此,static成员函数没有this指针,此外,static成员函数不能被声明为const,也不能被声明为虚函数。
static数据成员可以声明为任意类型,甚至是const