您的位置:首页 > 编程语言 > C语言/C++

C++ 读书笔记

2015-07-28 08:36 309 查看
记录自己的读书笔记,随时补充

1、如果类将其复制构造函数声明为private的,将不允许用户复制该类型的对象。但是类的友元和成员依然可以复制,如果想连类的友元和成员的复制也禁止,可以声明一个private的复制构造函数但不对其定义。C++允许只声明复制构造函数但不定义,但是构造函数和析构函数不可以,会造成无法编译。iostream类不允许复制。

2、内置类型的赋值运算符返回对右操作数的引用,赋值操作符返回对同一类型的引用。

3、即使我们编写了自己的析构函数,合成析构函数还仍然运行,先运行自定义的析构函数,然后在运行合成析构函数。

4、智能指针类的通用技术是采用一个计数器,计数器不能保存在具体对象中,可以定义一个类将该类和计数器封装起来。值型类将指针成员所指基础值的副本给每个对象。复制构造函数分配新元素并从被复制对象处复制值,赋值操作符撤销所保存的原对象并从右操作数向左操作数复制值,析构函数撤销对象。

5、重载操作符必须具有至少一个类类型或者枚举类型的操作数,不能重新定义内置类型的操作符。

6、加返回一个右值,而赋值返回一个引用。

7、赋值(=)、下标([])、调用(())和成员访问箭头(->)等操作符必须定义为成员,将这些操作符定义为非成员函数将在编译时标记为错误。 像赋值一样,复合赋值操作符通常应定义为类的成员,与赋值不同的是,不一定非得这样做, 如果定义非成员复合赋值操作符, 不会出现编译错误。 改变对象状态或与给定类型紧密联系的其他一些操作符,如自增、自减和解引用,通常就定义为类成员。 对称的操作符,如算术操作符、相等操作符、关系操作符和位操作符,最好定义为普通非成员函数。

8、<< 接受ostearm&作为第一个形参,对类类型的引用作为第二个形参,并返回对ostream形参的引用,输入>>类似。

9、IO操作符必须为非成员函数,通常将IO操作符设为友元。

10、Virtual的目的是启用动态绑定,除了构造函数之外,任意的费Static成员函数都可以是虚函数。非虚函数的调用在编译器时就能确定。

11、类的 protected 部分仍然不能被一般程序访问,但可以被派生类访问。只有类本身和友元可以访问基类的 private 部分,派生类不能访问基类的 private 成员。

12、返回对基类型的引用(或指针)的虚函数。派生类中的虚函数可以返回基类函数所返回类型的派生类的引用(或指针)。

13、派生类对象包含基类对象作为子对象,但是C++不要求编译器将对象的基类部分和派生类部分连续排列。

14、要触发动态绑定,满足两个条件:第一,只有指定为虚函数的成员函数才能进行动态绑定,成员函数默认为非虚函数,非虚函数不进行动态绑定;第二,必须通过基类类型的引用或指针进行函数调用。

15、引用和指针的静态类型与动态类型可以不同, 这是 C++ 用以支持多态性的基石。

16、如果虚函数的调用使用了域操作符来确定虚函数的版本,则该调用将在编译器确定。

17、将派生类对象传递给接收基类引用的对象时,引用直接绑定到该对象,对象本身未被复制,改对象仍然是派生类对象;将派生类传递给接受基类对象的函数时,形参的类型是固定的,派生类对象的基类部分会被复制到形参。

18、派生类可以自动转换成基类,但是不存在从基类到派生类的自动转换。

19、C++规定,对象的初始化发生在构造函数之前,用初始化列表进行初始化,构造函数内部的初始化已经不是初始化,而是赋值操作,初始化列表中的成员变量,其排列次序应该与在类中声明的次序一样。

20、构造派生类对象时首先运行基类构造函数初始化对象的基类部分。在执行基类构造函数时,对象的派生类部分是未初始化的。实际上,此时对象还不是一个派生类对象。同理撤销派生类对象时,首先撤销它的派生类部分,然后按照与构造顺序的逆序撤销它的基类部分。在这两种情况下,运行构造函数或析构函数的时候,对象都是不完整的。在基类构造函数或析构函数中,将派生类对象当作基类类型对象对待。如果在构造函数或者析构函数中调用虚函数,则运行的是构造函数或者析构函数自身类型对应的版本。

21、将函数定义为纯虚函数,该函数为后代类型提供了可以覆盖的接口,但是在这个类的版本中不能使用,最重要的是用户不能创建该类型的对象。

22、函数形参表定义了特定类型的局部变量但并不初始化那些变量,在运行时再提供具体的实参来初始化形参。

23、模板函数中,编译器用用户提供的实际特定类型代替类型Type重写编写模板类。模板可以只声明不定义。每个模板类型形参前面必须带上关键字 class 或 typename。类模板和函数模板。

24、通过编写 typename parm::size_type,指出绑定到 Parm 的类型的size_type 成员是类型的名字。

25、模板非类型形参是模板定义内部的常量值,在需要常量表达式的时候,可使用非类型形参(例如,像这里所做的一样)指定数组的长度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: