C++初级之基本知识
2010-11-02 08:59:37 来源:WEB开发网1. 类是具有固定数目元素的集合。类是一种把数据和数据上的操作组合在一起的一个独立单元,本质上是一种特殊的数据类型,本身不占存储空间。每个类对象只对数据成员分配存储空间。C++编译器为每个成员函数只产生一个物理拷贝。属于同一个类的所有对象都使用相同的成员函数拷贝。因此在画类图的时候,应该画出所有该类的所有成员(成员函数和变量);而在画对象时,只画出该对象的成员变量。类的成员变量可以完全表征该类对象的属性,只要类的设计满足完整性。类的接口(成员函数)仅仅访问和修改类对象自身的变量(属性)。
2. 私有成员不能在类的范围(定义)之外被访问,这些成员属于隐藏消息,只有在类的定义过程当中被使用,对外并不公开,也就无法被访问。
3. 公有成员可以在类的范围(定义)之外被访问。即可以通过类对象或是类指针对这些成员进行访问。正是这些公有成员(一般是成员函数,成员变量最好不是公有)实现类和外部世界的交互性。
4. 类的定义:需要哪些属性?(通过成员变量来体现)对外需要哪些(功能)接口?通过成员函数来实现。一般情况下,可以通过类的接口来访问或是修改类的属性(成员变量)。显然,由于用于交互的接口目标是在于访问和修改类的属性,因此这些接口的参数肯定不是类的属性,而是外部世界的参数。具体需要哪些属性和接口,依能够完整实现要求而定,即类设计的完整性。
5. 在类的定义过程当中。声明的变量不能进行初始化。正因如此,类一定要有构造函数。默认构造函数无参数。
6. 类的定义仅仅是一种数据类型的声明,不涉及存储分配。仅当使用类声明类变量(对象)时,才会分配存储空间。这一点和内置的数据类型一样。正是由于类仅仅是一种特殊的数据类型,并不占任何存储空间,因此类的定义中,变量是不能被初始化的。这也就是为什么在类的继承过程当中基类也必须在派生类的析构函数头部初始化(触发初始化,使用类名,此时并没有具体的类对象);为什么在类的组合过程中,作为成员变量的类对象也是不能被初始化的也必须在新类的析构函数头部初始化(使用类对象名)。
7. 类对象进入其作用域(类对象被创建)时,构造函数自动执行;类对象退出其作用域(类对象被释放)时,析构函数被自动执行。构造函数和析构函数是两个及其特殊的函数:没有类型的函数,既没有返回值,又不是void函数。因此他们不能被其他成员函数调用,也不能被类对象访问。只能是自动的执行。但是他们却可以调用类的成员函数,即他们可以访问类中的任意成员:函数和变量(目标就是初始化成员变量)。
8. 继承是”is-a”的关系;组合是”has-a”的关系。继承和组合是关联两个类或多个类的有效方法。
9. 派生类不能访问基类的私有成员。因为在类的设计中,消息隐藏是重要的。只要类的设计完整正确,使用者完全可以通过类的接口和类进行交互。类的这种封装特性,简化了类间的关联,增强了类的独立性,有利于开发。当然派生类的设计者要明确派生类所具有的属性:基类具有的属性以及派生类新增的属性。派生类对外提供的接口当中,必须能够使外界可以访问和修改这些属性。所有的类在设计上都必须是完整的。
10. 类的受保护成员。受保护成员的可访问性界于公有成员和私有生员之间。派生类可以直接访问基类的受保护成员。可以说受保护成员完全是为继承而设计的。对于派生类而言,不管是公有继承、受保护继承,还是私有继承,派生类均可以直接访问基类的共有成员和受保护成员,而基类的私有成员对外总是封闭的。公有继承、受保护继承,私有继承的区别仅仅在于:由基类继承而来的共有成员和受保护成员在派生类中就体现为何种属性而已:共有继承不改变基类成员在派生类中的属性;受保护继承的话,基类的共有成员和原有的受保护成员在派生类中均成为受保护成员;对于私有继承,基类的所有成员在派生类中将全部为私有成员。