《EffectiveC++》笔记

1.

    class A

    {

    public:

        A();

    };

    class B

    {

    public:

        explicit B(int x = 0, bool b = true);

    };

    class C

    {

        explicit C(int x);

    };

   

    void doSomething(B bObject);

   

    B bOjj1;

    doSomething(bOjj1);

   

    B bOjj2(28);

   // doSomething(28); //错误 B应该接受一个b,如果类B中去掉explicit,这样写可以程序自动把28转换成B类型的了

doSomething(B(28));  //没问题构造函数自动把int显示转换

除非我有一个好理由允许构造函数被用于隐式类型转换,否则我会把它声明为explicit,我鼓励你遵循相同的政策

2.

命名

GameCharacter *pgc;

// pgc = ptr to GameCharacter

3.

TR1式一份规范,描述加入c++标准程序库的诸多新机能

Boost是个组织,亦是个网站,提供可移植 同僚复审 源码开发的c++程序库

条款0.1

C++由4个组成 c, Object-Oriented C++ ,Template C++,STL

条款0.2

2.1如果定义常量指针的时候,为全局服务必须写2次const

const char * const authorName=sfwefr;

2.2

如果常量的作用域限制于class内,你必须让他成为class的一个成员;而为确保此常量至多一份实体,你必须让它成为一个static成员:

请记住:

对于单纯常量,最好以const对象或enums替换#defines

对于形式函数的宏,最好改用inlin函数替换#defines

条款0.3

(不是很理解)

条款 0.4

2.构造/析构/赋值运算

条款0.5

条款0.6

条款0.7

条款0.9在析构和析构期间不要调用virtual函数。程序在执行的时候会先调用基类的构造函数,因为在基类构造函数中调用了虚函数,此时派生类中的成员变量没有初始化,虚函数中的成员没有初始化。此时编译器就会报错。

条款10令赋值操作符返回一个referenceto  *this

条款11在opertaor=中处理“自我赋值“。有4版本:1.直接删除2.证同测试3.记住原先的pb(指针)4.使用copy和swap技术。基类或派生类的引用或指针可以指向同一个对象。

条款12复制对象时勿忘其每一个成分。派生类的拷贝构造函数和拷贝赋值操作符没有操作基类的。引入第三者,并由连个coping函数共同调用

 

3.资源管理

 

条款16成对使用new和delect时要采取相同的形式

条款17以独立语句将newed对象置入智能指针

4.设计与声明

条款18

已经看懂

条款22

5.实现

条款26尽可能延后变量定义式的出现。这样做可增加程序的清晰度并改善程序效率

条款27

条款30

条款31将文件间的依存关系降至最低

6.继承与面向对象设计

条款34 区分接口继承和实现继承。在设计的时候仔细考虑。

条款36绝对不要重新定义继承而来的non-virtual函数

条款37 绝不重新定义继承而来的缺省参数值。静态绑定又名前期绑定,动态绑定又名后期绑定。

    father *pf;

father *pc1= new child;

pf静态类型是father  没有动态类型

pc1静态类型是father动态类型是child

virtual函数是动态绑定,而缺省参数值却是静态绑定。可能会赋基类中的缺省值。(具体见条款37,181-182部分)

7.模版与范型编程(这一章看起来比较吃力,过几个月再去仔细看)

条款41了解隐式接口和编译期多态

显式接口:就是它在源码中明确可见的,显示接口由函数的签名式构成。

隐式接口:是由有效表达式组成。

Class 接口式显式的,template接口是隐式的

条款42了解typename的双重定义

条款43学习处理模版化基类内的名称(挺有用的)

派生类内通过this->指涉基类内的成员名称

条款44 将于参数无关的代码抽离templates

条款45

条款46

条款47

条款48

TMP模版元编程

8.定制new和delete

 

条款51了解new和delete的合理替换时机

条款53不要轻忽编译器的警告。除非有些警告你很清楚为什么会这样

条款54 让自己熟悉TR1(technical report 1)在内的标准程序库

标准程序库包括:

stl

iostreams

国际化支持,包括多区域能力。(不了解)

数值处理,包括复数模板和纯数组

异常阶段体系(不了解)

c89标准程序库。

 

TR1中的14格新组件:

智能指针:  tr1::shared_ptr,tr1::weak_ptr

tr1::function: 表示任何的函数或函数对象

tr1::bind   能够做stl绑定器所做的每一件事

(还有一些,不是很重要)

条款55 让再见熟悉Boost

Boost是一个社群,也是一个网站。致力于免费.源码开放。同僚复审的c++程序开发。

 

 

 

 

 

 

 

 

你可能感兴趣的:(C/C++基础)