读书笔记:C++primer plus第十章

来源:互联网 发布:excel 没有数据分析包 编辑:程序博客网 时间:2024/05/29 04:54

第十章 对象和类

10.1过程性编程和面向对象编程:

过程性编程:首先考虑要遵循的步骤,然后考虑如何表示这些数据。面向流程,先确定算法,在确定数据。

OOP:从用户的角度考虑对象,描述对象所需的数据以及描述用户与数据交换所需的操作。完成对接口的描述后,还要确定如何实现接口和数据存储。程序的设计分析过程,就是将程序分解成不同对象(不同概念体)之间的交互的过程

10.2 C++中的类

1. 访问控制:使用类的对象的程序都可以直接访问公有部分,但只能通过公有成员函数(或友元函数)来访问对象的私有成员。类默认private,结构体默认为public。
2. 成员函数的特征:可以访问类的private组件;作用域。
3. 定义位于类声明中的函数都将自动成为内联函数。类声明常常将短小的成员函数作为内联函数。若在声明之外定义内联函数则用inline限定符即可。内联函数特殊规则:要求每个使用它们的文件中都对其进行定义。简便方法:将内联函数定义放在类的头文件中。
4. 所创建的每个新对象都有自己的存储空间,用于存储其内部变量和类成员;但是都共享同一组类方法(成员函数就一个副本)。
5. 只要类的方法不修改调用的对象,就应该将其声明为const

10.3 构造函数和析构函数

1. 构造函数没有声明类型,构造函数的初始化列表应与定义顺序相同。不要用数据成员的值去初始化其他数据成员
2. 如果构造函数使用了new,则析构函数必须使用delete的析构函数。
3. 每个成员函数(包括构造函数和析构函数)都有一个this指针,如果要方法要引用整个调用对象,可以使用*this。如果有括号后面使用了const限定符,将不能使用this来修改对象。

10.5 对象数组

1. 初始化对象数组的方案是,首先使用默认构造函数创建数组元素,然后花括号中的构造函数将创建临时对象,然后将临时对象的内容复制到相应的元素中。因此,要创建数组元素,这个类必须有默认构造元素

10.6 作用域为类的常量

class A{private:  const int Months=12;  double cost[Months];}
    这是错误的方法,因为声明类只是描述对象的形式,并没有创建对象。因此,在创建对象前,将没有用于存储值的空间。
推荐方法一:枚举enum
class A{private:enum{Months=12};double costs[Months];}
    注意:用这种方法声明枚举并不会创建类的数据成员。即,所有对象都不包含枚举。Months只是一个符号名称。作用域为整个类的代码中遇到他都时,编译器将用12替换它。
    这里的使用枚举只是为了创建符号常量,并不打算创建枚举类型的变量,因此不需要使用枚举名。
推荐方法二:static
class A{private:static const int Months=12;double costs[Month];}
这里将创建一个常量Months,该常量与其他静态比变量存储在一起,而不是存储在对象中。

10.7 本章总结

    面向对象编程强调的是程序如何表示数据。使用OOP方法解决编程问题的第一步是根据它与程序之间的接口来描述数据,从而指定如何使用数据。然后设计一个类来实现该接口。一般来说,私有数据成员存储信息,公有成员函数提供访问数据的唯一途径。
    通常将类的声明放在两个文件中,类的声明放在头文件中,而定义成员函数的源代码放在方法文件中。便于将接口描述和实现细节分开。
0 0
原创粉丝点击