大一上学期学的半本谭浩强算是还给李波了,鹅厂的主流语言是C++,不得不快速把它捡起来。作者Stanley B. Lippman曾在C++之父Bjarne Stroustrup所领导的贝尔实验室里共同研发cfront编译器,同时他也是《C++ Primer》的作者之一,目前就职于动画电影公司Dreamworks。在短短200页的篇幅里,C++的基本语法,面向过程以及面向对象的最最最重要的内容都被阐述的非常清楚,非常适合有一定经验的程序员快速上手C++。
自己对比了一下C++和Java,虽然牺牲了一点性能,但后者的使用友好度确实高于前者。比如随时随地定义与使用方法无需提前声明,默认虚函数,将多重继承转化为单一继承和接口,泛型类和泛型方法的简单定义语法,自动垃圾回收等机制替程序员省了不少事。
Basic C++ Programming
bool, char, short int, int, long int, float, double, long double
命名用下划线
namespace: 避免命名冲突
const: 不再变化
指针先检查再使用
if (ptr && ptr->function())
enum E {A, B, C};
static_cast
dynamic_cast
typedef existing_type new_name;
Procedural Programming
函数先声明后调用
T &ref = val; // 引用,相当于别名,非0且一定代表某个对象
方法参数拷贝传值,加&为非拷贝直接引用T *ptr = new T(initial_value); delete ptr;
T *ptr = new T[n]; delete [] ptr;
在函数声明中形参可以设置默认值
static: 局部静态对象(函数返回后依然存在),静态函数通过类就能调用
inline: 直接展开函数提高性能
函数模板(泛型方法)
template
函数指针,直接按名字调用,实现函数式编程
T (*function_ptr)(T)
Object-Based Programming
|
|
类定义和inline成员函数放在头文件中,非inline成员函数放在程序文件中
this: 调用本函数的对象的指针
friend: 类中声明友元类与友元函数,可以访问private成员
function object: 重载函数调用运算符bool operator()的对象,即可被当作函数来调用
类成员函数指针: T (myClass::*function_ptr)(T)
类模板(泛型类)
|
|
类模板成员函数template <typename T> T myClass<T>::function(T param);
常量表达式作为template参数
|
|
Object-Oriented Programming
|
|
virtual(虚函数): 子类覆盖超类方法,在runtime动态解析调用超类还是子类的函数
超类中声明virtual,子类中可以不声明virtual,函数定义时不必加virtual
纯虚函数: 抽象类的抽象函数,virtual T function(T param) = 0;
先调用超类构造函数,后调用子类构造函数
先调用子类析构函数,后调用超类析构函数
protected: 可被子类访问
超类对象无法动态解析虚函数,只有超类指针或引用才能动态解析虚函数
Exception Handling
|
|
Standard Template Library (STL)
container
|
|
vector - ArrayList
|
|
list - LinkedList
|
|
deque - ArrayDeque
|
|
map
|
|
set
|
|
iterator
|
|
Algorithm
|
|
Library
尖括号表示其他目录下的标准头文件,双引号表示本目录下的自定义头文件
|
|