EffectiveC++学习(一)

来源:互联网 发布:网络监控安装教程 编辑:程序博客网 时间:2024/05/21 14:51

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”);

use const whenever possibe

0 0