C++ Prime(二)

  • 编译器隐式地将在类内定义的成员函数当做内联函数
  • 编译器创建的默认构造函数对于具有类类型的成员,会调用该成员所属类自身的默认构造函数实现初始化,内置类型成员的初值依赖与对象如何定义
  • C++中,名字查找发生在类型检查之前,需要类型转换的匹配劣于需要类型提升的匹配
  • 无法将整型值传递给枚举类型的形参,但可以将枚举值传递给整型形参
  • 不能及与之针是否是const来实现函数的重载(都复制了指针,当形参以副本传递时,不能基于形参是否为const来实现重载)
  • iostream读写控制窗,fstream读写文件,sstream读写内存中的string对象
  • 只有支持复制的元素类型可以存储在vector或其他容器类型里
  • 形参或返回类型不能为流类型,若需传递或返回IO对象,则必须传递或返回指向该对象的指针或引用
  • endl输出一个换行符并刷新缓冲区,flush不在输出中添加任何字符,ends在缓冲区插入NULL再刷新
  • unitbuf在每次执行完写操作后都刷新流,nounitbuf将流恢复为使用正常的、有系统管理的缓冲区刷新方式,如果程序崩溃了,则不会刷新缓冲区
  • tie函数可捆绑istream与ostream对象,如cin.tie(&cout); 取消捆绑:cin.tie(0);
  • C++的IO标准库使用C风格字符串,而不是C++ strings类型的字符串作为文件名,假设要使用的文件名保存在string对象中,可点用c_str成员函数获取C风格字符串
  • 将文件流与新文件重新捆绑前需要调用close()
  • 若重用文件流读写多个文件,必须在读另一个文件之前调用clear清除该留的状态
  • 为ofstream对象指定out模式等效于同时指定了out和trunc模式,当文件同时以in和out模式打开时不清空(模式是文件的属性而不是流的属性)
  • association container关联容器,generic algorithm泛型算法
  • 顺序容器:vector、list、deque  顺序容器适配器:stack、queue、priority_queue
  • 无元素是引用类型的容器,引用不支持一般意义的赋值运算,除IO标准库外其它标准库类型都是有效的元素类型
  • 算术运算、关系操作符只适用于vector和deque容器
  • 修改容器的内在状态或移动容器内的元素,会使迭代器失效
  • 容器定义的类型别名:size_type、iterator、const_iterator、reverse_iterator、const_reverse_iterator、different_type、value_type、reference、const_reference
  • 容器元素都是副本
  • 使用迭代器遍历map容器时,迭代器指向的元素按键的升序排序
  • 算法不执行容器提供的操作
  • back_inserter是迭代器适配器,要引入iterator头文件
  • 算法不直接修改容器的大小,如果需要添加或删除元素,则必须使用容器操作
  • 依赖于特定容器的迭代器:insert iterators、iostream iterators、reverse iterators
  • insert_iterators:back_inserter、front_inserter、inserter
  • inserter在指定位置前面插入,即使此插入位置初始化为容器的第一个元素,但一旦在该位置前插入一个新元素后,插入位置就不在是容器的首元素了
  • 带有谓词函数形参的算法其名字带有后缀_if,将处理后的元素写入另一个序列,而非自身的算法,其名字带有后缀_copy
  • 在声明和定义处指定inline都是合法的(只在一处指定即可)
  • 如果在多个文件中定义一个类,那么每个文件中的定义必须是完全相同的
  • 在声明之后定义之前,类是一个不完全类型,不完全类型只能用于定于指向该类型的指针及引用,或者用于声明(非定义)使用该类型作为形参类型或返回类型的函数,不能定义该类型的对象
  • 类不能具有自身类型的数据成员,但类的数据成员可以是指向自身类型的指针或引用
  • const成员函数只能返回*this作为一个const引用
  • 如果函数在类定义体之外定义,则用于返回类型的名字在类作用域之外。如果返回类型使用由类定义的类型,则必须使用完全限定名
  • 构造函数分两个阶段执行:初始化阶段,普通的计算阶段  没有默认构造函数的类类型的成员,以及const或引用类型的成员,不管是哪种类型,都必须在构造函数初始化列表中进行初始化(可以初始化const对象或引用类型的对象,但不能对其赋值)
  • 可以通过将构造函数声明为explicit,来防止在需要隐式转换的上下文中使用构造函数
  • static成员函数没有this形参,static数据成员与类关联,而不是与对象关联
  • cout << showpoint<< ...  cout.precision = 3则sqrt(2.0)=1.41
  • cout <<scientific << sqrt(2.0)<<fixed <<sqrt(2.0)
  • cout <<uppercase <<scientific<<sqrt(2.0)<<fixed<<sqrt(2.0)
  • 声明一个函数而不对其进行定义,可以禁止复制(如IO)
  • 流类型不能作为函数的形参或返回类型,必须使用流类型的指针或引用
  • 动态分配的对象只有再指向该对象的指针被删除时才撤销,容器中的元素按逆序撤销
  • 三法则:若类需要析构函数,则它也需要赋值操作符和复制构造函数
  • 即使自己定义了构造函数,其执行完后系统依然会执行合成构造函数
  • 普通的非const成员函数中this的类型是一个指向类类型的const指针,可以改变this所指向的值,但不能改变this所保存的地址(不能从const成员函数返回指向类对象的普通引用。const成员函数只能返回*this作为一个const引用)
  • 构造函数初始化列表中成员被初始化的次序就是成员被声明的次序
  • 只有当一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数
  • 流迭代器只定义了最基本的迭代器操作:自增,解引用和赋值,此外,两个istream迭代器可比较等或不等,而ostream迭代器不同
  • 重载操作符必须具有至少一个类类型或枚举类型的操作数
  • 重载操作符不保证操作数的求值顺序,||及&&的重载版本两操作数都要求有值
  • 作为类成员的重载函数,形参看起来比操作数数目少1,因有一个隐含的this形参为第一个操作数
  • 一般将算术和关系操作符定义为非成员函数,而将赋值操作符定义为成员函数
  • 尽量不要重载,& || && 赋值操作符
  • 如一个类有算数操作符或位操作符,则最好提供相应的复合赋值操作符
  • 将要用做关联容器键类型的类应定义<操作符
  • IO操作符必须为非成员函数,类通常将IO操作符设为友元
  • 为了与内置操作符保持一致,加法返回一个右值,而非一个引用
  • 只要下标造作符返回引用,就可以用作赋值的任意一方
  • 定义了调用操作符的类,其对象成为函数对象,即它们是行为类似函数的对象
  • 标准库函数对象类型在functional头文件定义
  • 转换函数一般不允许转换为数组或函数类型,转换为指针类型(数据和函数指针)以及引用类型是可以的。转换函数必须是成员函数,不能指定返回类型且形参表为空。一般,不应该改变被转换的对象,因此转换操作符通常应定义为const成员
  • 如果一个类拥有指针成员或者复制对象时有一些特定工作要做,则该类需复制构造函数
  • 内置类型的赋值运算返回对左操作数的引用,因此赋值操作符也返回对同一类类型的引用
  • C++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定,非virtual的函数调用在编译时确定
  • 除构造函数外,任意非static成员函数都可以是虚函数
  • 派生类只能通过派生类对象访问其基类的protected成员,派生类对其基类对象的protected成员没有特殊访问权限
  • 一旦函数在基类中声明为虚函数,他就一直为虚函数,派生类无法改变这一事实
  • 通过using声明可以使派生类恢复继承成员的访问级别,但不能使访问级别比基类中原来指定的更严格或更宽松。
  • 使用class保留字定义的派生类默认具有private继承,而用struct保留字定义的类默认具有public继承
  • 友元关系不能继承
  • 如果基类定义 static 成员(第 12.6 节),则整个继承层次中只有一个这样的成员
  • 如果是 public 继承,则用户代码和后代类都可以使用派生类到基类的转换。如果是 private 继承,则从 private 继承类派生的类不能转换为基类。如果是 protected 继承,则后续派生类的成员可以转换为基类类型。
  • 无论是什么派生访问标号,派生类本身都可以访问基类的 public 成员,因此,派生类本身的成员和友元总是可以访问派生类到基类的转换。
  • 在这些情况下,如果知道从基类到派生类的转换是安全的,就可以使用 static_cast(第 5.12.4 节)强制编译器进行转换。或者,可以用 dynamic_cast 申请在运行时进行检查
  • 派生类构造函数只能初始化自己的直接基类
  • 基类类型的指针(引用或对象)只能访问对象的基类部分
  • 在基类和派生类中使用同一名字的成员函数,即使函数原型不同,基类成员也会被屏蔽
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值