秋招日记(二)C++细碎知识点
学习记录
- 《深入理解计算机系统》
- 第7章:链接
- 第8章:异常控制流
牛客C++选择题知识点总结
(很多知识点,不是题目提到,我都不知道,C++冷知识)
- 清除文件错误状态的函数是 clear()
- 类的实例化是指创建类的对象
- 设置虚基类的声明是为了消除二义性,防止多重继承中,派生类拥有多个基类相同的对象
- c++语言编写的程序具有可移植性,可以被多个程序文件引用
- 动态联编是指编译时不确定所调用的函数代码,而是运行时确定
- 作用域标识符的作用是标识某个成员函数是属于哪个类
- 封装性是指将数据与和这些数据有关的操作封装在一个类中,而不仅仅是封装不同的数据
- 定义派生类时默认的继承方式是私有继承
- 类的复制构造函数的形参类型是该类的引用
- A类是B类的友元,则B类中的所有成员函数都是A的友元函数
- 在软件开发中,需求分析阶段产生的主要文档是软件需求规格说明书
- 在局部变量和全局变量重名时,全局变量暂时失效
- 算法的时间复杂度取决于问题的规模及待处理数的初态
- 多个成员对象构造函数的调用顺序与成员对象在类中的声明的顺序相同
- 派生类的构造函数会隐式调用基类的构造函数
- 如果基类中没有缺省的构造函数,那么派生类必须定义构造函数
- 在建立派生类对象时,先调用基类的构造函数,在调用派生类的构造函数
- 在销毁派生类的对象时,先调用派生类的析构函数,再调用基类的析构函数
- 类是一个抽象的概念,而对象是类的具体实例
- 三目运算符的优先级大于算术优先级
- 抽象类中一定包含纯虚函数
- 线性表中的插入、删除操作再线性存储方式下的时间复杂度是o(N),在链式存储方式下是o(1)
- 运算符重载时不需要保持的性质是操作数的类型,换言之重载的运算符的操作数个数,优先级及结合性均不会改变
- 多继承是派生类继承多个不同的类,且基类间无关,所有不会出现虚基类成员访问的二义性
- 程序调试的任务是诊断和改正程序中的错误
- 数据库的三级模式包含概念模式、内模式和外模式
- 线性表链式存储的优点是便于插入和删除操作
- c++中else子句总是与其之前最近未配对的if配对
- 使用虚基类可以菱形继承的二义性问题但是不能实现运行时的多态性
- break的作用是跳出当前循环,不能直接在if中使用
- 赋值运算符重载函数只能是类的非静态成员函数,因为赋值运算符需要返回类的this指针,而静态成员函数中没有this指针
- 树的度指的是树中节点最大的度,而节点的度指的是节点的分支树,二叉树的度小于等于2,且叶子节点数总是比度为2的节点多一个
- 在共有派生的情况下,派生类中定义的成员函数能访问原基类的保护成员和公有成员,不能访问私有成员
- 调用模板函数时,可以省略模板实参,模板函数可以重载
- 模板的形参表中可以有多个参数
- 模板声明中的关键字class、typename在有些时候不能替换
- 内部静态变量的作用域是定义它的函数
- 栈与数据的存储结构无关,它只是代表一种操作逻辑
- 在数库设计中在需求分析阶段建立数据字典
- 快速排序在最坏的情况下的时间复杂度为o(n^2)
- 一个普通基类也可以派生类模板
- 函数的类模板参数必须通过构造函数实例化
- 类模板从普通类派生,也可以从类模板派生
- 根据建立对象时的实际数据类型,编译器把类模板实例化为模板类
- 在数据库系统中,数据的物理结构与逻辑结构可以不一致
- 数据库技术的根本目标时要解决数据的共享问题
- 数据库设计的指在已有数据库管理系统的基础上建立数据库
- 数据库系统需要操作系统的支持
- 软件的生命周期包括需求分析、软件测试和软件维护
- 结构化程序设计主要强调的是程序的易读性
- 派生类的虚函数与基类的虚函数需要具有相同的形参类型和个数
- c++中函数都是并列关系,不能嵌套定义
- 集合、多重集合和映射都是关联容器
- =,[],(),->只能通过成员函数来重载,其需要用到对象本身
- 在C++程序中常见的两种错误为语法错误和运行错误
- 所谓异常是指在程序运行过程中,由于系统条件、操作不当等原因而引起的运行错误
- 异常是可以预见的
- c++中的异常处理机制可以时问题检测和处理分离
- 面对对象的多态性是通过函数重载实现的
- 在公有派生情况下,派生类的对象可以直接赋给基类的对象,并丢弃其非基类成员
- 派生类的对象可以初始化基类的引用
- 派生类的对象的地址可以赋给指向基类的指针
- 基类的析构函数被声明为虚函数,则派生类的析构函数无论是否使用virtual关键字都将自动成为虚析构函数
- 当使用delete时,隐含了对于析构函数进行一次动态联编调用
- 当不能决定是否将析构函数声明为虚析构函数时,尽量将析构函数声明为虚析构函数
- 基类的成员函数在派生类中被隐藏的条件时函数名相同
- 公共继承后,基类的公有成员和保护成员会作为派生类的公有成员和保护成员
- 派生类的成员和对象都不能访问基类的私有成员
- 面对对象设计方法的主要特征时,继承,封装和多态
- 建立一个有成员对象的派生类对象时,构造函数的调用次序为 基类、成员对象类,派生类
- 在c++中编译系统自动为一个类生成默认构造函数的条件时该类没有定义任何构造函数
- 在程序中一切操作都是通过面对对象发送消息来实现的,对象接受到消息后,调用相应的函数方法来完成操作
- 对于有序链表的查找的的最坏比较次数为log2n
- 在c++语言中对变量的存储类型有:自动变量、寄存器变量、外部变量和静态变量
- delete必须用于new返回的指针
- 且一个指针只能调用一次该运算符
- C++中main函数并不一定要在最前面
- c++程序的每行可以写多条语句
- c++语言本身没有输入输出语句
- do while的循环体不可以是空语句
- 虚基类的子对象的初始化由最后一个派生出来的类完成
- C++程序由函数组成,函数是程序的基本单位
- 命名空间只能全局定义
- 可以定义无名的命名空间,意味着命名空间中的标识符只能本文件使用,相当于static
- 覆盖指的是派生类对于基类虚函数的重定义,要求函数名、参数、返回值类型均相同
- 双端队列的实现一般为循环数组
- 函数模板和类模板的参数不能是任意的数据类型,必须使该类型支持模板的必要操作
- 系统总体结构图不支持软件系统的详细设计
- C++程序中的静态存储类别变量和外部变量的初始化是在编译阶段完成的
- 若在IO流的输出中使用控制符setfill填充字符,应该包括iomanip头文件
- 数据结构的五大特征:有穷性,确定性,可行性,输入,输出
- 每个派生类的构造函数都要为 虚基类构造函数提供实参
- 软件设计过程中应该遵循的原则是高内聚低耦合
- 在C++类体系中,能被派生类继承的函数有转换函数、构造函数、虚函数和静态成员函数
- 虚函数一定不是类的静态成员函数
- 数据的基本单位是数据元素
- c++源程序中不能表示的数
- 结构化程序设计主要强调的是程序易读性
- 派生类是基类的组合
- 结构化程序设计的三种基本结构是顺序、选择和循环
- c++标识符的开头只能是字母和下划线
- 构造函数、静态成员函数、内联函数和友元函数不能被声明为虚函数
- 类型转换运算符只能作为成员函数重载
- c++异常处理机制包括try,throw和catch
- 负责数据库中查询操作的数据库语言是数据操纵语言
- 设计模式的主题是系统复用和系统扩展
- c++可以定义自己的异常类
- 软件测试的首要目的是提高软件的质量
- 类模板的实例化在编译时进行
- 构造数据类型包括数组,结构体,联合体和枚举类型
- 三大基本结构:顺序,分支,循环
- 为了防止二义性,重载函数的形参不允许有默认值
- 析构函数不能重载