C++ 读书笔记

记录自己的读书笔记,随时补充
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、模板非类型形参是模板定义内部的常量值,在需要常量表达式的时候,可使用非类型形参(例如,像这里所做的一样)指定数组的长度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值