一、类的定义和声明
类背后蕴含的基本思想是数据的抽象与封装。数据抽象,将接口/方法的使用和实现分离开来,使得设计者和使用者各司其职,设计者专注于类的设计与实现,使用者则只需要关心如何使用类提供的接口。数据封装,将数据成员利用private标号保护起来,外部的函数方法不可见,有效地保护了类自身的数据。数据抽象和封装密切不可分,某种意义上,正是由了数据的抽象提供的公共接口才使得数据可以被封装在类内。二者结合的好处就是:数据成员封装有效避免了无意的、可能破坏对象状态的用户级错误(用户无法直接接触类的核心数据);程序的修改、扩展以及维护都只需要关注类的内部,极大地减少了后期需要的成本。
这部分另一个比较重要的是类定义与类声明的区别。如果从编译器的角度来看,类声明是告诉这个类型不是“黑户”,类定义则是正式为合法户口安排“住”的空间。因此,经过声明的类只是不完全体,只有定义之后才真正可用。定义对象时必须在进行了类的定义之后(说明了类的数据成员和成员函数)。一般来说,只有在类定义之后,数据成员才能被声明为该类型,因此,类中是不能含有自身类型的数据成员的;但是对于引用和指针而言,她们只需要声明就可以了,而类名已出现恰恰就可以认为是类的声明了:
class A
{
... ...
}
class B
{
A class-obj-A; //A类型的数据成员
A *next; //引用和指针
A &class-obj-B;
}