C++ 读书笔记

原创 2015年07月28日 08:36:08

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

effective C++ 读书笔记

  • 2014-11-20 11:07
  • 261KB
  • 下载

[读书笔记] 深入探索C++对象模型-第三章 Data语义学(下)

整理第三章最后的部分内容,关于数据成员指针的,之前竟然没听过类数据成员指针一说,果然路漫漫其修远兮啊。 注:以下例子和图片来源于原书。 1. 数据成员指针是指指向类数据成员的指针,其内容为对应数据成员...

C++设计模式读书笔记

  • 2009-11-18 15:45
  • 1.64MB
  • 下载

《C++_Primer》MSDN读书笔记

  • 2013-11-07 10:42
  • 204KB
  • 下载

《C++ primer》(4th)读书笔记(1 start)

0,Preface等相关  structure of this book: Much of the power of C++ comes from its support for programmin...

C++ primer读书笔记--第二章 变量和基本类型

1、C++是静态类型语言,在编译时执行类型检查。 2、C++最重要的特征是类,程序员可以使用类自定义数据类型。C++的表达能力是通过支持一些允许程序员定义新数据结构的机制来提升的。 3、C++基本内置...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)