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


扩展C++中提供的运算符的适用范围 , 以用于类所表示的抽象数据类型 。 同一个运算符 , 对不同类型的操作数 , 所发生的行为不同 。
运算符重载的函数一般地采用如下两种形式:成员函数形式和友元函数形式 。 这两种形式都可访问类中的私有成员 。
2020年最全面的C++复习大纲!面向对象程序设计,建议收藏文章插图
32.为什么重载为全局函数的运算符通常要比重载为成员函数的运算符多一个参数?举例说明 。
当重载为成员函数时 , 会有一个this指针 , 指向当前的类 , 所以只需要一个参数就可以了 。
而当重载为全局函数时 , 将没有隐含的参数this指针 , 这样将会多一个参数 。
2020年最全面的C++复习大纲!面向对象程序设计,建议收藏文章插图
33.什么是析构函数?析构函数有返回值吗?析构函数如何命名?析构函数可以重载吗?
与构造函数相反 , 当对象结束其生命周期 , 如对象所在的函数已调用完毕时 , 系统会自动执行析构函数 。
析构函数没有返回值 。
名字与类名相同 , 在前面加‘~’ 。
析构函数不返回任何值 , 没有函数类型 , 也没有函数参数 , 因此它不能被重载 。
34.析构函数的作用是什么?什么时候会被调用?为什么析构函数通常是虚函数 , 如果不是虚函数 , 会如何?(google)
析构函数对象消亡时即自动被调用 。
作用:清空并释放对象先前创建或者占用的内存资源 。
如果析构函数不被声明成虚函数 , 则编译器采用的绑定方式是静态绑定 , 在删除基类指针时 , 只会调用基类析构函数 , 而不调用派生类析构函数 , 这样就会导致基类指针指向的派生类对象析构不完全 。
若是将析构函数声明为虚函数 , 不管派生类的析构函数前是否加virtual(可以理解为编译器优化) , 都构成重写 。 基类的指针指向派生类的对象 , 然后调用重写虚函数——析构函数 , 构成了多态 , 而多态与类型无关 , 只与对象有关 , 所以就能够调用的就是派生类的析构函数了 。
35.在一个类中 , 为什么静态成员函数(static member function)中不能使用this指针?
静态成员函数并不是针对某个类的实例对象 , 而是属于整个类的 , 为所有的对象实例所共有 。 他在作用域的范围内是全局的 , 独立于类的对象之外的 。 他只对类内部的静态成员变量做操作 。 当实例化一个类的对象时候 , 里面不存在静态成员的 。 this指针是相当于一个类的实例的指针 , this是用来操作对象实例的内容的 , 既然静态成员函数和变量都是独立于类的实例对象之外的 , 他就不能用this指针 。 也不能操作非静态成员 。
36.如果要编写一段程序 , 跟踪类A所创建的实例的个数 , 请叙述编写程序的大体思路 。
2020年最全面的C++复习大纲!面向对象程序设计,建议收藏文章插图
37.什么是C++中的三大函数(The Big Three)?(google)
Big Three: 是指 如果一个类要实现下面某一个成员函数 , 一般都要一起实现另外两个:
1)Desconstructor 析构函数
2) copy constructor 拷贝构造函数
3) operator = 赋值函数
38.什么是UML?如何画UML中的类图?什么是类与类之间依赖关系、关联关系、包含关系?试举例说明这三种类之间的关系 。 这三种关系如何和UML图表示?
UML统一建模语言 , UML语言是一种可视化的的面向对象建模语言 , 描述软件模型的静态结构、动态行为及模块组织与管理 。
依赖关系:一个事物的变化可能会影响到使用它的另一个事物 。 举例:驾驶员(源)开车(目标) 。
关联关系:一个类的对象和另一个类的对象之间相互作用 。 举例:老师和学生 , 小明的语文老师是张老师 , 张老师的学生有小明 。
包含关系:聚集和组合
聚集表示类之间的关系是整体与部分的关系 。 举例:班级成员和学生 。
组合是指整体拥有各个部分 , 整体和部分共存 , 整体不存在了 , 部分也会随之消失 。 举例:打开一个视窗口 , 它由标题、外框和显示区域组成 , 视窗口是一个整体 , 它消失了 , 部分也就随之消失了 。
继承关系:在UML中称为泛化 。 举例:鸭子和鸟 , 鸭子是一种鸟 , 继承了鸟的特性 。
39.常见的类与类之间的关系有哪几种 , 举例说明每种关系的对应UML图如何画?两个什么样的类可以实现为继承关系?(google)
依赖关系、关联关系、包含关系、继承关系 。
具有共同属性的两个类可以实现继承关系 。