2020年最全面的C++复习大纲!面向对象程序设计,建议收藏


2020年最全面的C++复习大纲!面向对象程序设计,建议收藏文章插图
1.叙述面向对象编程的特点是什么?(提示:封装、继承、多态 。 )
对比面向过程具有抽象、封装、继承和多态的特点 。
封装是将抽象得到的数据和行为相结合 , 形成了一个有机整体 , 使得一部分成员充当类与外部的接口 , 而将其他成员隐藏了起来达到了对成员访问权限的合理控制 , 使得不同类之间的影响最小 , 加强数据安全 , 简化编程 。
继承允许在保持原有类特性的基础上 , 进行更具体、更详细的说明 , 能够很好反映出特殊概念和一般概念之间的关系 , 是代码复用的基础机制 。
多态使得一段程序能够具有处理多种类型对象的能力 , 相同的消息在不同的对象下会有不同的动作 , 增强了编程的灵活性 。
2.使用const定义常量与用使用define定义常量相比 , 有什么优点?
a. const常量有数据类型 , 而宏常量没有数据类型 。 编译器可以对const常量进行类型安全检查 , 而对宏常量只能字符替换
b. 有些集成化的调试工具能对const常量进行调试 , 对宏常量不能调试
c.const定义的常量在程序运行的过程中只有一份拷贝 , 而define定义的常量在内存中有若干拷贝 。
3.用代码说明在标准C++中如何进行输入输出 , 并解释各语句的含义是什么?
cout<<"hello!"<<"world";
cin>>a>>b;
在输入时 , 从键盘输入的数据先放在键盘缓冲区中 , 当按回车键时 , 键盘缓冲区中的数据输入到程序中的输入缓冲区 , 形成cin流 , 然后用流提取运算符“>>”从输入缓冲区中提取数据送给程序中的有关变量 。
当用cout和流插入运算符“<<”向显示器输出数据时 , 先将这些数据送到程序中的输出缓冲区保存 , 直到缓冲区满了或遇到endl , 就将缓冲区中的全部数据送到显示器显示出来 。
4.C++中如何进行静态类型转换 , 解释并举例说明 。
(1)用于类层次结构中基类和派生类之间指针或引用的转换 。 进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时 , 由于没有动态类型检查 , 所以是不安全的 。
2020年最全面的C++复习大纲!面向对象程序设计,建议收藏文章插图
将派生类型的指针转化为基类型的指针
(2)用于基本数据类型之间的转换 , 如把int转换成char , 把int转换成enum 。 这种转换的安全性也要开发人员来保证 。
double a; int b=100;
a =static_cast (b);
(3)把空指针转换成目标类型的空指针(不安全!!) 。
(4)把任何类型的表达式转换成void类型 。
5.阐述C++中函数三种调用的方式实现机制、特点及其实参、形参的格式 , 最好用代码说明 。 (提示:传址、传值、引用传递)
在C++中调用函数时有三种参数传递方式:
(1)传值调用;
2020年最全面的C++复习大纲!面向对象程序设计,建议收藏文章插图
(2)传址调用(传指针);
用指针类型作为形参的值调用方式 , 可以通过参数返回修改后的值 。
2020年最全面的C++复习大纲!面向对象程序设计,建议收藏文章插图
(3)引用传递;
按引用传递 , 引用实参的引用参数传递给函数 , 而不是进行参数拷贝 。 引用类型的形参与相应的实参占用相同的内存空间 , 改变引用类型形参的值 , 相应实参的值也会随着变化 。
2020年最全面的C++复习大纲!面向对象程序设计,建议收藏文章插图
6.什么是内联函数?为什么要使用内联函数?
在编译时将所调用函数的代码直接嵌入到主调函数中 , 而不是将流程转出去 , 这种嵌入到主调函数中的函数成为内联函数 。
为了节省参数传递、控制转换等开销 , 比如:压栈、弹栈、保存现场与恢复现场 。
7.什么是类的前向声明?使用类的前向声明时 , 要注意什么?
遇到两个类相互引用的循环依赖情况
2020年最全面的C++复习大纲!面向对象程序设计,建议收藏文章插图
前向引用声明 , 是在引用未定义的类之前 , 声明该类 , 使编译器知道那是一个类名 。 这样 , 当程序中使用这个类名时 , 编译器就不会认为是错误 , 而类的完整定义可以在程序的其他地方 。
注意:尽管使用了前向引用声明 , 但是在提供一个完整的类声明之前 , 不能定义该类的对象 , 也不能在成员函数中使用该类的对象 。 只能用于定义指针、引用、以及用于函数形参的指针和引用 。 当你使用前向引用声明时 , 你只能使用被声明的符号 , 而不能涉及类的任何细节 。