C++抽象编程 Programming Abstracting in C++ 全书笔记(未完结)
来源:互联网 发布:知乎 扶她出去吧 编辑:程序博客网 时间:2024/06/03 03:35
此篇文章来源于斯坦福的计算机编程课,
网址:http://web.stanford.edu/class/cs106b/
每次重头开始看书都是看那些基本语法,语法看得太多并没有任何效果,以后不再复习C的基础知识,比如变量,语句,循环看得再多也还是不会面向对象,以后要看深入的的知识。
简单摘抄几个句子。
00. 目录
1. Overview of C++
1.1 Your first C++ program
1.2 The history of C++
1.3 The structure of a C++ program
1.4 Variables
01. C++常见的的命名规则,属性和方法小写开头,类使用大写,单词之间首字母大写。常量全部大写,可以用短划线隔开各个。
In this text, names of variables and functions begin with a lowercase letter, such as limit or raiseToPower. The names of classes and other programmer-defined data types begin with an uppercase letter, as Direction or TokenScanner.
Constant values are written entirely in uppercase, as in PI or HALFJOLLAR. Whenever an identifier consists of serveral English words run together, the usual convention is to capitalize the first letter of each word to make the name easier to read.
Because that strategy doesn't work for constants, programmers use the underscore character to mark the word boundaries.
1.5 Data types
02. 类型
In C++, every data type value has an associated data type. From a formal perspective, a data type is define by two properties: a domain, which is the set of values that belong to that type, and a set of operations, which defines the behavior of that type.
03. 枚举
The syntax for defining an enumerated type is
enum typename {namelist};
Where typename is the name of the new types and namelist is a list of the constants in the domain, separated by commas.
04. 优先级
If two operators have the same precedence, they are applied in the order spcified by their associativity, which indicates whether that operator group to the left or to the right.
1.6 Expressions
1.7 Statements
Summary
Review question
05. 习题
review
1. source file
2. // /* */
3. <>表示系统标准库 " "自己写的头文件
4. const duoble CENTIMETERS_PER_INCH = 2.54;
5. main return 0;
6. 屏幕上换行
7. 名字 类型 数值 范围
8. c f
9. member operator
10. 表示的范围不同
11. 美国字符
12. true false
13. double x; cin >> x;
14. cout << "i = " << i << ", d = " << d << ", c = " << c << ", s = " << s << endl;
15. int 5, int 3, double 4.8, double 18, int 4, int 2
16. unary表示负值,substraction表示减法操作。
17. 去掉小数部分
18. 一种类型转化为另一种类型, type (var)
19. 4
20. var1 += var2
21. ++x 先将x加1再进行操作。
22. short-circuit evaluation 在&& 和 ||中只要计算正确后面不再计算
23. if (boolean) statement;
switch(var) {
case item:
statement; break;
}
24. 判断一个输入是否结束的特殊值。
for (int i = 1; i <= 100; i++)
for (int i = 100; i >= 0; i+= 2)
Exercises
2. Functions and Libraries
2.1 The idea of a function
2.2 Libraries
2.3 Defining functions in C++
06. 默认值需要记住的两点
When you use default parameters, it helps to keep the following rules in mind:
1. The specification of the default value appears only in the function prototype and not in the function definition.
2. Any default parameters must appear at the end of the parameter list.
2.4 The mechanics of function calls
2.5 Reference parameters
07. 将大的程序分成若干小段,同时使用引用传递参数,程序结构很清晰。
#include <iostream>#include <cstdlib>#include <cmath>using namespace std;/* Function prototypes */void getCoefficients(double &a, double &b, double &c);void solveQuadratic(double a, double b, double c, double &x1, double &x2);void printRoots(double x1, double x2);void error(string msg);int main(int argc, char *argv[]){ double a, b, c, r1, r2; getCoefficients(a, b, c); solveQuadratic(a, b, c, r1, r2); printRoots(r1, r2); return 0;}// Reads in the coefficients of a quadratic equation into the// reference paramters a, b, and c.void getCoefficients(double &a, double &b, double &c) { cout << "Enter coefficients for the quadratic equation: " << endl; cout << "a: "; cin >> a; cout << "b: "; cin >> b; cout << "c: "; cin >> c;}// Solves a quadratic equation for the coefficients a, b, and c. The// roots are returned in the reference parameters x1 and x2.void solveQuadratic(double a, double b, double c, double &x1, double &x2) { if (a == 0) error("The coefficient a must be nonzero."); double disc = b * b - 4 * a * c; if (disc < 0) error ("This equation has no real roots"); double sqrtDisc = sqrt(disc); x1 = (-b + sqrtDisc) / (2 * a); x2 = (-b - sqrtDisc) / (2 * a);}// Displays x1 and x2, which are the roots of the quadratic equation.void printRoots(double x1, double x2) { if (x1 == x2) cout << "There is a double root at " << x1 << endl; else cout << "The roots are " << x1 << " and " << x2 << endl;}// Writes the string msg to the cerr stream and then exits the program// with a standard status value indicating that a failure has occurred.void error(string msg) { cerr << msg << endl; exit(EXIT_FAILURE);}
2.6 Interfaces and Implementations
08. 宏的使用
#ifndef ERROR_H#define ERROR_H#include <string>void error(std::string msg);#endif // ERROR_HIn this interface, the boilerplate consists of the #ifndef and #define lines at the beginning of the interface and the matching #endif line at the end.
These lines make sure that the compiler doesn't compile the same interface twice.
09. 实现
#include <iostream>#include <cstdlib>#include <string>#include "error.h"using namespace std;void error(string msg) { cerr << msg << endl; exit(EXIT_FAILURE);}10. 类型
enum Direction {NORTH, EAST, SOUTH, WEST};The simplest approach to making this type accessible through a library interface would be to write a direction.h interface that contained only this line along with the usual interface that contained only this line along with the usual interface boilerplate. If you were to adopt that strategy, you wouldn't need to supply an implementation at all.
#ifndef DIRECTION_H#define DIRECTION_H#include <string>enum Direction {NORTH, EAST, SOUTH, WEST};Direction leftFrom(Direction dir);Direction rightFrom(Direction dir);std::string DirectionToString(Direction dir);#endif // DIRECTION_H
#include <string>#include "direction.h"using namespace std;Direction leftFrom(Direction dir){ return Direction((dir + 3)) % 4;}Direction rightFrom(Direction dir){ return Direction((dir + 1) % 4);}string DirectionToString(Direction dir){ switch (dir) { case NORTH: return "NORTH"; case EAST: return "EAST"; case SOUTH: return "SOUTH"; case WEST: return "WEST"; default: return "???"; }}11. 常量需要在声明和引用中同时加extern
To export the constant PI, you need to add the keyword extern to both its definition and the prototype declaration in the interface.
extern const double PI;gmath.cpp文件中
extern const double PI = 3.14159265358979323846;2.7 Principles of interface design
12. 程序不要复杂化
To make programming manageable, you must reduce the complexity of the programming process as much as possible.
Functions reduce some of the complexity; libraries offer a similar reduction in programing complexity but at a higher level of detail.
A library gives its client access to a set of functions and types that implement what computer scientists describe as a programming abstraction.
2.8 Designing a random number library
13. 统一
A central feature of a well-designed interface is that is presents a unified and consistent abstraction.
14. 设计一个random函数库
2.9 Introduction to the Stanford libraries
Summary
Review questions
Exercises
3. Strings
3.1 Using strings as abstract values
3.2 String operations
3.3 The <cctype> library
3.4 Modifying the contents of a string
3.5 The legacy of C-style strings
3.6 Writing string applications
3.7 The strlib.h library
Summary
Review questions
Exercises
4. Streams
4.1 Using strings as abstract values
4.2 Formatted input
4.3 Data files
4.4 Class hierarchies
4.5 The simpio.h and filelib.h libraries
Summary
Review questions
Exercises
5. Collections
5.1 The Vector class
5.2 The Stack class
5.3 The Queue class
5.4 The Map class
5.5 The Set class
5.6 Iterating over a collection
Summary
Review questions
Exercises
6. Designing Classes
6.1 Representing points
6.2 Operator overloading
6.3 Rational numbers
6.4 Designing a token scanner class
6.5 Encapsulating programs as classes
Summary
Review questions
Exercises
7. Introduction to Recursion
7.1 A simple example of recursion
7.2 The factorial function
7.3 The Fibonacci function
7.4 Checking palindromes
7.5 The binary search algorithm
7.6 Mutual recursion
7.7 Thinking recursively
Summary
Review questions
Exercises
8. Recursive Strategies
8.1 The Towers of Hanoi
8.2 The subset-sum problem
8.3 Generating permutations
8.4 Graphical recursion
Summary
Review questions
Exercises
9. Backtracking Algorithms
9.1 Recursive backtracking in a maze
9.2 Backtracking and games
9.3 The minimax algorithm
Summary
Review questions
Exercises
10. Algorithmic Analysis
10.1 The sorting problem
10.2 Computational complexity
10.3 Recursion to the rescue
10.4 Standard complexity classes
10.5 The Quicksort algorithm
10.6 Mathematical induction
Summary
Review questions
Exercises
11. Pointers and Arrays
11.1 The Structure of memory
11.2 Pointers
11.3 Arrays
11.4 Pointer arithmetic
Summary
Review questions
Exercises
12. Dynamic Memory Management
12.1 Dynamic allocation and the heap
12.2 Linked lists
12.3 Freeing memory
12.4 Defining a CharStack class
12.5 Heap-stack diagrams
12.6 Unit testing
12.7 Copying objects
12.8 The use of const
12.9 Efficiency of the CharStack class
Summary
Review questions
Exercises
13. Efficiency and Representation
13.1 Software patterns for editing text
13.2 Designing a simple text editor
13.3 An array-based implementation
13.4 A stack-based implementation
13.5 A list-based implementation
Summary
Review questions
Exercises
14. Linear Structures
14.1 Templates
14.2 Implementing stacks
14.3 Implementing queues
14.4 Implementing vectors
14.5 Integrating prototypes and code
Summary
Review questions
Exercises
15. Maps
15.1 Implementing maps using vectors
15.2 Lookup tables
15.3 Hashing
15.4 Implementing the HashMap class
Summary
Review questions
Exercises
16. Trees
16.1 Family trees
16.2 Binary search trees
16.3 Balanced trees
16.4 Implementing maps using BSTs
16.5 Partially ordered trees
Summary
Review questions
Exercises
17 Sets
17.1 Sets as a mathematical abstraction
17.2 Expanding the set interface
17.3 Implementation strategies for sets
17.4 Optimizing sets of small integers
Summary
Review questions
Exercises
18. Graphs
18.1 The structure of a graph
18.2 Representation strategies
18.3 A low-level graph abstraction
18.4 Graph traversals
18.5 Defining a Graph class
18.6 Finding shortest paths
18.7 Algorithms for searching the web
Summary
Review questions
Exercise
19. Inheritance
19.1 Simple inheritance
19.2 A hierarchy of graphical shapes
19.3 A class hierarchy for expressions
19.4 Parsing an expression
19.5 Multiple inheritance
Summary
Review questions
Exercises
20 Strategies for iteration
20.1 Using iterators
20.2 Using functions as data values
20.3 Encapsulating data with functions
20.4 The STL algorithms library
20.5 Functional programming in C++
20.6 Implementing iterators
Summary
Review questions
Exercises
A Stanford library interfaces
Index
(完结)
0 0
- C++抽象编程 Programming Abstracting in C++ 全书笔记(未完结)
- 使用Java语言进行2D游戏编程基础 Fundamental 2D Game Programming with Java 全书笔记(未完结)
- Notes on Programming in C--C语言编程笔记(一)
- Notes on Programming in C--C语言编程笔记(二)
- 《C和指针》全书"警告与编程提示"总结笔记
- C程序设计学习笔记(完结)
- C程序设计学习笔记(完结)
- C程序设计学习笔记(完结)
- C程序设计学习笔记(完结)
- Programming in Objective-C 学习笔记01
- Programming in Objective-C 学习笔记02
- [高质量C++/C编程]—代码风格总结 未完结
- C语言编程--Programming in C 习题答案
- Programming experience in C
- Substring in c programming
- Practical Programming in C
- Programming SQLite3 in C
- 《The Django Book》笔记(未完结)
- 自定义控件01(三种)
- 字符
- 货架式仓库管理系统(WMS)
- hdu 2795 Billboard(线段树)
- Android OpenMobileAPI SEService模块总结
- C++抽象编程 Programming Abstracting in C++ 全书笔记(未完结)
- 密码学之DES算法
- node.js学习(十三、Buffer模块)
- CFile
- tera term和TTL脚本进行自动化控制
- 毕业设计的坑--关于动作游戏的mecanim动画系统详细设计(4)
- 计算机科学和编程导论-week2-简单算法
- kali Linux中安装谷歌中文输入法
- 关于C的小程序-3