Accustoming yourself to C++
术语
declaration:告诉编译器某件东西的名称和类型
extern int x;//整型声明
class classname;//类声明
size_t numDigit(int i,double n);//函数声明
template<typename T>;//模版声明
PS:整数也是一个对象,就算它是内置类型的。几乎所有C++标准程序库元素都在std命名空间里。
标准程序库:C++中的标准程序库是类库和函数的集合,其使用核心语言写成。标准程序库提供若干泛型容器、函数对象、泛型字符串和流(包含交互和文件I/O),支持部分语言特性和常用的函数,如开平方根。C++标准程序库也吸收了ISO C90 C标准程序库。标准程序库的特性声明于std命名空间之中。
标准模板程序库是C++标准程序库的子集,包含容器、算法、迭代器、函数对象等。也有些人使用术语STL代表C++标准程序库。
使用C++标准程序库时,不必加上“.h”。
typedef double wages;
typedef wages base,p;//base是double的类型,p是double的类型
initialization初始化“赋予对象初值”
对于用户自定义的对象而言,初始化在构造函数执行。default构造函数要么没有参数,要么每个参数都有缺省值。
copy构造函数用来“以同型对象初始化自我对象”
class widget{
public:
widget();
//copy构造函数
widget(const widget& rhs);//可以接收非const实参
//copy assignment操作符
widget& operator=(const widget& rhs);
};
widget w1;//defalut构造函数
widgt w2(w1);//调用copy构造函数
w1=w2;//调用copy assignment操作符
//PS:赋值符号也可以用来调用copy构造函数
widget w3=w1;
//如果一个新对象被定义(w3),一定会有构造函数被调用,不可能赋值操作。copy构造函数很重要,因为它是定义一个对象如何passed by value。
bool hasAccept(widget w);
widget w1;
hasAccept(w1);
//上面的代码就说明W1被copy到w中去
//PS:pass by reference to const是个好一点的选择
STL容器:
致力于容器,例如vector,list,set,mp;迭代器,例如vector::iterator,set::iterator;算法,例如for_each,find,sort等等。
item 1 view C++ as a federation of language
1、C
2、object_oriented c++:class(构造函数,析构函数)
3、template c++
4、STL
item2 perfer const enums and inline to #define
“使用编译器,而不是预处理器”
.#define ASP_RADIO 1.456
ASP_RADIO或许从未被编译器看见,若其被定义在一个不是自己写的头文件里,你对1.456毫无概念,会因为追踪它而浪费时间
一般的解决方案是const double a=1.456;
//若定义一个常量的指针(这里有一些知识涉及到顶层const和底层const)
const char* const auther=”bad man”;
//better:const string auther(“bad man”);