《C++ Primer Plus》第十章学习笔记
这一章实在重要,提出了颠覆面向过程编程的一种新的思维方法(OOP)。重点:理解抽象,封装,数据隐藏等的概念。
附上复习题第二题及答案:
Q:什么是抽象?什么是封装?什么是数据隐藏?
A:A class represents the operations you can perform on a class object with a public interface of class methods; this is abstraction. The class can use private visibility (the default) for data members, meaning that the data can be accessed only through the member functions; this is data hiding. Details of the implementation, such as data representation and method code, are hidden; this is encapsulation.
103:OOP特性:
1、抽象
2、封装和数据隐藏
3、多态
4、继承
5、代码的可重用性
104:类和结构之间唯一的区别是,结构的默认访问类型是public,而类是private。
105:Cerr对象用于错误消息。
106:使类成员函数称为内联函数的方法:
1、其定义位于类声明中得函数都将自动称为内联函数;
2、在类中声明函数,在类外实现时在函数前面加上inline即可。
107:Ios_base是std中的一个名称空间。//原版和中文版都是这么说的,但网上查了半天,查到的都是ios_base是std中的一个类。
108:为类定义了构造函数后,程序员就必须为它提供默认构造函数。
109:在设计类时,通常应提供对所有类成员做隐式初始化的默认构造函数。
110:在默认情况下,将一个对象赋给同类型的另一个对象时,C++将源对象的每个数据成员的内容复制到目标对象中相应的数据成员中。
111:接受一个参数的构造函数允许使用赋值句法来将对象初始化为一个值:Classname Object = value ,除非使用explicit阻止这种行为。
112:如果既可以通过初始化,也可以通过赋值来设置对象的值,则应采用初始化方式。通常这种方式的效率更高。
113:出于效率方面的考虑,许多类成员函数的参数类型都是const的引用。
114:一般来说,所有类方法都将this指针设置为调用它的对象的地址。
115:两种定义作用域为整个类的常量:
1、声明一个枚举,比如enum {MAX = 10};
2、使用关键字static,比如static const int a = 10;只能使用这种技术声明值为整数或枚举的静态常量,而不能存储double变量。
fixed是ios_base类中定义的典型的枚举量。
116:若对类成员函数提供默认参数,默认参数只能出现在原型中,而不是在函数定义中。
117:本书中貌似实现了很多数据结构,以后会在出现的时候稍微记一下,第一次出现:P327 实现了栈
一个细节:P308 中文版把”Reviewing Our Story to Date”翻译成“小结”,太无趣了,确实难翻,翻成“小结”是个偷工减料但表达明确的方法,但总少了点味道。
书中的错误:
P313 程序10.5最好包括头文件cstring;
P320 stock2.h和stock2.cpp分别写了2个析构函数的定义,虽然都为空,但依旧是不允许的;
P325 倒数第六行的cout应改为cin;
P332 编程练习2的第四行定义常量少了一个int。