已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C C C C 面试题面试题 专注于服务器编程 网络编程专注于服务器编程 网络编程 1 1 1 1 C 面试题 1 1 类成员指针类成员指针 Class test Public Int fun int const Int fun int Static int fun int Int iTemp 1 1非静态成员函数指针 定义 int Test pFun int int Test pFunConst int const 使用 Test a const Test b a pFun 2 或 a pFunConst 2 b pFunConst 2 不能用 b pFun 2 1 2非静态成员变量 int Test pInt a pInt 3 1 3静态成员函数指针 int pFun 或 int pFun Test fun 都正确 注 定义无域操作符 使用 pFun 或 pFun 都正确 C C C C 面试题面试题 专注于服务器编程 网络编程专注于服务器编程 网络编程 2 2 2 2 2 2 非成员函数指针和静态成员函数一致 非成员函数指针和静态成员函数一致 3 3 非成员函数和静态成员函数上不允许修饰符 例如非成员函数和静态成员函数上不允许修饰符 例如 voidvoidvoidvoid fun fun fun fun const const const const voidvoidvoidvoid fun fun fun fun volatile volatile volatile volatile 但非静态但非静态 成员函数允许成员函数允许 constconstconstconst volatilevolatilevolatilevolatile 等修饰符 等修饰符 4 4 变量修饰符变量修饰符 auto 指定数据存储在栈中 局部变量默认为auto 该修饰符不能用于成员变量和全局变量 static 局部变量表示存储在静态空间 全局变量表示不允许外部引用 volatile 表示该变量可能随时改变 不要做任何假设优化 mutale 去除成员变量的 const 属性 extern 全局变量默认为 extern 属性 表示可被外部引用 此时与static 相对 extern int a 2 表示定义一个可被外部引用的变量 extern int a 表示引用外部变量 5 5 数据类型隐式转换数据类型隐式转换 短数据 长数据 eg float double 有符号 无符号 eg int unsigned int PS 所以 int 1 unsigned int 1 低精度 高精度 eg int float 6 memcpy6 memcpy6 memcpy6 memcpy 有有 防重叠防重叠 覆盖机制 覆盖机制 strcpystrcpystrcpystrcpy 没有 没有 7 float7 float7 float7 float 表示表示 共计 32位 折合 4 字节 由最高到最低位分别是第 31 30 29 0位 31位是 符号位 1 表示该数为负 0反之 30 23 位 一共 8位是指数位 22 0 位 一共 23位是尾数位 每 8位分为一组 分成 4组 分别是 A组 B 组 C 组 D组 每一组是一个字节 在内存中逆序存储 即 DCBA C C C C 面试题面试题 专注于服务器编程 网络编程专注于服务器编程 网络编程 3 3 3 3 8 8 不能在类的声明中初始化类常量 而只能在构造函数初始化列表来初始化不能在类的声明中初始化类常量 而只能在构造函数初始化列表来初始化 9 9 类中的枚举常量不占用对象的存储空间类中的枚举常量不占用对象的存储空间 10 10 有时候函数原本不需要返回值 但为了增加灵活性如支持链式表达 可以附加返回值 有时候函数原本不需要返回值 但为了增加灵活性如支持链式表达 可以附加返回值 11 11 赋值函数 应当用赋值函数 应当用 引用传递引用传递 的方式返回的方式返回 StringStringStringString 对象 如果用对象 如果用 值传递值传递 的方式 虽然功的方式 虽然功 能仍然正确 但由于能仍然正确 但由于 returnreturnreturnreturn 语句要把语句要把 this this this this 拷贝到保存返回值的外部存储单元之中 增加拷贝到保存返回值的外部存储单元之中 增加 了不必要的开销 降低了赋值函数的效率 了不必要的开销 降低了赋值函数的效率 12 12 对于非内部数据类型的对象而言 光用对于非内部数据类型的对象而言 光用 maloc freemaloc freemaloc freemaloc free 无法满足动态对象的要求 对象在无法满足动态对象的要求 对象在 创建的同时要自动执行构造函数 创建的同时要自动执行构造函数 对象在消亡之前要自动执行析构函数 如果用对象在消亡之前要自动执行析构函数 如果用 freefreefreefree 释放释放 newnewnewnew 创建的动态对象创建的动态对象 那么该对象因无法执行析构函数而可能导致程序出错 如果 那么该对象因无法执行析构函数而可能导致程序出错 如果用用 deletedeletedeletedelete 释放释放 mallocmallocmallocmalloc 申请的动态内存申请的动态内存 理论上讲程序不会出错 但是该程序的可读性很 理论上讲程序不会出错 但是该程序的可读性很 差 差 13 13 如果用如果用 newnewnewnew 创建对象数组 那么只能使用对象的无参数构造函数 创建对象数组 那么只能使用对象的无参数构造函数 deletedeletedeletedelete 时如果对象时如果对象 没有析构函数 则没有析构函数 则 deletedeletedeletedelete 和和 delete delete delete delete 是功能相同的 是功能相同的 14 14 只能靠参数而不能靠返回值类型的不同来区分重载函数 编译器根据参数为每个重载函数只能靠参数而不能靠返回值类型的不同来区分重载函数 编译器根据参数为每个重载函数 产生不同的内部标识符 并不是两个函数的名字相同就能构成重载 全局函产生不同的内部标识符 并不是两个函数的名字相同就能构成重载 全局函 数和类的成员函数和类的成员函 数同名不算重载 因为函数的作用域不同 数同名不算重载 因为函数的作用域不同 15 15 关键字关键字 inlineinlineinlineinline 必须与函数定义体放在一起才能使函数成为内联 仅将 inline 放在函数声明前面不 起任何作用 定义在类声明之中的成员函数将自动地成为内联函数 以下情况不宜使用内联 1 如果函数体内的代码比较长 使用内联将导致内存消耗代价较高 2 如果函数体 内出现循环 那么执行函数体内代码的时间要比函数调用的开销 大 16 16 只有静态常量整型数据成员才可以在类中初始化 普通成员只能在初始化列表或函数内初只有静态常量整型数据成员才可以在类中初始化 普通成员只能在初始化列表或函数内初 始化 常量成员只能在初始化列表 成员对象初始化的次序完全不受它们在始化 常量成员只能在初始化列表 成员对象初始化的次序完全不受它们在 初始化表中次序初始化表中次序 的影响 只由成员对象在类中声明的次序决定 的影响 只由成员对象在类中声明的次序决定 17 17 拷贝构造函数和赋值函数非常容易混淆 常导致错写 错用 拷贝构造函数是在对象被创拷贝构造函数和赋值函数非常容易混淆 常导致错写 错用 拷贝构造函数是在对象被创 建时调用的 而赋值函数只能被已经存在了的对象调用 建时调用的 而赋值函数只能被已经存在了的对象调用 C C C C 面试题面试题 专注于服务器编程 网络编程专注于服务器编程 网络编程 4 4 4 4 18 18 不想编写拷贝构造函数和赋值函数 又不允许别人使用编译器生成的 则只需将拷贝构造不想编写拷贝构造函数和赋值函数 又不允许别人使用编译器生成的 则只需将拷贝构造 函数和赋值函数声明为私有函数 不用编写代码 函数和赋值函数声明为私有函数 不用编写代码 19 19 19 19 constconstconstconst T T T T 和和 T T T T constconstconstconst 总是都被允许的 而且是等效的 总是都被允许的 而且是等效的 注意在常量指针 注意在常量指针 constconstconstconst pointerpointerpointerpointer 中 中 constconstconstconst 永远出现在永远出现在 之后 之后 例如 例如 intintintint const const const const p1p1p1p1 q q q q 指向指向 intintintint 变量的常量指针变量的常量指针 intintintint const const const const p2p2p2p2 q q q q 指向指向 intintintint 常量的指针常量的指针 constconstconstconst int int int int p3p3p3p3 q q q q 指向指向 intintintint 常量的指针常量的指针 20 20 一个常见的微妙问题是 一个函数风格的宏并不遵守函数参数传递的规则 一个常见的微妙问题是 一个函数风格的宏并不遵守函数参数传递的规则 21 21 没有引用数组 但可有指向数组的引用 并且保留数组的边界 没有引用数组 但可有指向数组的引用 并且保留数组的边界 22 22 左值拥有保存值的位置 而右值则没有相关地址 只是简单值 左值拥有保存值的位置 而右值则没有相关地址 只是简单值 23 23 负索引是可以的 如负索引是可以的 如 p 2 p 2 p 2 p 2 或或 2 p 2 p 2 p 2 p 都是可以的都是可以的 p p p p 必然不能是数组名必然不能是数组名 但必须保持不 但必须保持不 越界 越界 sum p q r sum p q r sum p q r sum p q r 不能保证不能保证 p q r p q r p q r p q r 调用的顺序 调用的顺序 逗号运算符逗号运算符 可以保证求值顺序可以保证求值顺序 result result result result p q r p q r p q r p q r 是先求是先求 p q p q p q p q 然后将然后将 r r r r 赋赋 给给 resultresultresultresult 24 24 在在 if if if if 的条件里声明变量 且可在真假分支里面使用 的条件里声明变量 且可在真假分支里面使用 constconstconstconst intintintint constconstconstconst p pp pp pp p 是个指针 指向常指针的 常指针指向一个常量是个指针 指向常指针的 常指针指向一个常量 intintintint 25 25 不能用空白初始化列表来规定默认的对象初始化不能用空白初始化列表来规定默认的对象初始化 class a a A 会警告 看起来像函数声明 a p new a ok a p new a ok 26 26 可以写一句只有数字的代码 如可以写一句只有数字的代码 如 1234 void 0 1234 void 0 1234 void 0 1234 void 0 可以编译执行 相当于可以编译执行 相当于 nopnopnopnop 27 27 给函数指针赋值时可以对函数名取地址也可以不取 通过函数指针调用函数时可以用给函数指针赋值时可以对函数名取地址也可以不取 通过函数指针调用函数时可以用 也也 可不用 可不用 C C C C 面试题面试题 专注于服务器编程 网络编程专注于服务器编程 网络编程 5 5 5 5 28 static cast28 static cast28 static cast28 static cast 可以转换基本数据类型可以转换基本数据类型 int char int char int char int char void void void void 和有类型指针 基类和派生和有类型指针 基类和派生 类指针的转换类指针的转换 多重继承也行多重继承也行 它可重新计算偏移地址它可重新计算偏移地址 但是不能转换如 但是不能转换如 int char int char int char int char 等等 29 dynamic cast29 dynamic cast29 dynamic cast29 dynamic cast 主要用于执行主要用于执行 安全的向下转型安全的向下转型 reinterpret cast reinterpret cast reinterpret cast reinterpret cast 可执行任何转可执行任何转 换换 const cast const cast const cast const cast 执行去执行去 constconstconstconst 转换 转换 30 30 将取地址运算符用到完全限定的类成员名将取地址运算符用到完全限定的类成员名 包括变量和函数包括变量和函数 就能获得指向成员的地址 就能获得指向成员的地址 使用形式为使用形式为 X X X X 来声明一个指向类来声明一个指向类 X X X X 成员的指针 注意声明成员成员的指针 注意声明成员 函数指针的时候不能像函数指针的时候不能像 普通函数指针可以省略普通函数指针可以省略s Hello s Hello s Hello 34 34 函数对象是重载函数调用运算符的类对象 函数对象是重载函数调用运算符的类对象 35 35 引用需要用左值进行初始化 但指向常量的引用除外 编译器将创建一个临时左值 引用需要用左值进行初始化 但指向常量的引用除外 编译器将创建一个临时左值 如如 constconstconstconst intintintint c 12 okc 12 okc 12 okc 12 ok 一般情况下编译器产生的临时对象的生命期在它所在的最大表达式一般情况下编译器产生的临时对象的生命期在它所在的最大表达式 范围内 但用临时对象初始化常量对象的引用时会让编译器保证临时对象和引用生命周期一范围内 但用临时对象初始化常量对象的引用时会让编译器保证临时对象和引用生命周期一 样 样 36 36 可以将基类的成员指针可以将基类的成员指针 变量或函数变量或函数 安全的转换为指向派生类成员的指针 但反之则不安安全的转换为指向派生类成员的指针 但反之则不安 全 全 37 37 函数参数的传递是采用拷贝构造函数而非赋值操作 对未初始化的对象赋值可能会出现意函数参数的传递是采用拷贝构造函数而非赋值操作 对未初始化的对象赋值可能会出现意 外 如类中含有未初始化指针 外 如类中含有未初始化指针 38 38 声明但不定义私有的拷贝构造和赋值运算将会关闭类的复制操作 并且赋值运算 拷贝构声明但不定义私有的拷贝构造和赋值运算将会关闭类的复制操作 并且赋值运算 拷贝构 造函数和析构函数不会被继承 对派生类重载赋值运算时需要调用基类的赋造函数和析构函数不会被继承 对派生类重载赋值运算时需要调用基类的赋 值运算 值运算 39 39 在构造函数里对成员变量初始化 比较好的方式是使用初始化列表 在初始化列表中静态在构造函数里对成员变量初始化 比较好的方式是使用初始化列表 在初始化列表中静态 成员和数组不能被初始化 成员和数组不能被初始化 类的初始化顺序是虚拟基类的成员类的初始化顺序是虚拟基类的成员 非虚基类成员非虚基类成员 类自身成员 和初始化列表的顺序无类自身成员 和初始化列表的顺序无 关 关 C C C C 面试题面试题 专注于服务器编程 网络编程专注于服务器编程 网络编程 6 6 6 6 含有虚拟基类和不含的类在成员布局上不一样 含有虚拟基类的类将虚拟基类的数据放在最含有虚拟基类和不含的类在成员布局上不一样 含有虚拟基类的类将虚拟基类的数据放在最 后面 另外如后面 另外如 B virtualB virtualB virtualB virtual A C virtualA C virtualA C virtualA C virtual A D B C A D B C A D B C A D B C 均是虚继承均是虚继承 则则 DDDD 的构造函数将对的构造函数将对 A A A A 初初 始化一次始化一次 即使在初始化列表没有显式初始化即使在初始化列表没有显式初始化 A A A A B CB CB CB C 将不再对将不再对 A A A A 初始化 初始化 所有静态数据所有静态数据 全局变量和静态存储变量全局变量和静态存储变量 在使用前如未初始化其值都为在使用前如未初始化其值都为 0 0 0 0 全局变量可以存储全局变量可以存储 在静态初始化区和未初始化区 在静态初始化区和未初始化区 40 RVO40 RVO40 RVO40 RVO 返回值优化 是指在函数返回中执行拷贝初始化到直接初始化返回值优化 是指在函数返回中执行拷贝初始化到直接初始化
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年船舶供应合同
- 北京朝阳医院血液净化科三基三严理论考试试题及答案
- 2025年液化气考试题库及答案
- 2025放射工作人员考试题库含答案
- 动车组机械师工具使用熟练度考核试卷及答案
- 2025年技术员考试试题含答案
- 2025年焊工技师证考试题库及答案
- 2025年危险化学品生产单位安全生产管理人员安全生产模拟考试题库及答案
- 砂石供应运输合同
- 2025年经济师中级经济基础试题及答案
- GB/T 46634-2025冲模导柱固定座
- 敬畏生命安全班会课件
- 2025江苏南通市海门区卫健系统部分医疗机构招聘合同制人员67人考试笔试参考题库附答案解析
- 完整版国企钢结构施工工艺指导手册
- 2025年甘肃省白银市靖远县石门乡人民政府选聘专业化管理村文书考试笔试备考题库及答案解析
- 2025云南山水物业服务有限公司招聘(6人)笔试考试参考试题及答案解析
- 执法类面试题目及答案
- 2025采购供应合同书范本
- 2025年供应链金融试题库及答案
- 2025年大学《马克思主义理论-马克思主义中国化研究》考试参考题库及答案解析
- (通讯维修工)理论知识考试题库
评论
0/150
提交评论