面向对象的技术与方法-答案
using namespace std;
int i;
int main()
{ i=9;
{ int i;
i=32;
cout<<"i="<<i<<endl;
}
cout<<"i="<<i;
return 0;
}
请写出程序的显示输出:
I= 32
I= 9
2. 源程序如下:
#include<iostream>
using namespace std;
2. 简述前置++运算符与后置++运算符的重载原理。
假设关于ClassA进行前置和后置++的重载,则其重载函数大概形式应如下:
ClassA&ClassA::operator++() //前置++
{
itsVal++;
return *this;
}
const ClassA ClassA::operator++(int) //后置++
保持已有类的特性而构造新类的过程称为继承
3.派生
在已有类的基础上新增自己的特性而产生新类的过程称为派生
被继承的已有类称为基类(或父类)。
派生出的新类称为派生类。
4.多态
多态是指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在一般类及其各个特殊类中具有不同的语义。
1.封装
把对象的属性和服务结合成一个独立的系统单元。
尽可能隐蔽对象的内部细节。对外形成一个边界(或者说一道屏障),只保留有限的对外接口使之与外部发生联系
2.继承
继承对于软件复用有着重要意义,是面向对象技术能够提高软件开发效率的重要原因之一。
定义:特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。
通过派生类的对象不能直接访问基类中的任何成员。
4. 简述虚函数与抽象类的概念与联系。
虚函数
虚函数是动态绑定的基础。
是非静态的成员函数。
在类的声明中,在函数原型之前写virtual。
virtual 只用来说明类声明中的原型,不能用在函数实现时。
具有继承性,基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。
5.拷贝构造函数
拷贝构造函数是一种特殊的构造函数,其形参为本类的对象引用。
class 类名
{ public :
类名(形参);//构造函数
类名(类名 &对象名);//拷贝构造函数
...
};
类名:: 类名(类名 &对象名)//拷贝构造函数的实现
{ 函数体 }
二.简答题(共4小题,每题5分,共20分)
1. 简述相对于面向过程设计思想,面向对象程序设计思想所具有的优势。
对于暂时无法实现的函数,可以声明为纯虚函数,留给派生类去实现。
注意
抽象类只能作为基类来使用。
不能声明抽象类的对象。
构造函数不能是虚函数,析构函数可以是虚函数。
三.程序分析(共4小题,每题10分,共40分,说明:阅读并分析各小题中的源程序,按要求写出程序执行结果。)
1. 源程序如下:
#include<iostream>
面向过程
有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。
面向对象程序
使程序能够比较直接地反问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发。
程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障。
通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。
经重载后,表达式 oprd++ 相当于 oprd.operator ++(0)
3. 简述私有继承与公有继承之间的区别。
不同继承方式的影响主要体现在:
派生类成员对基类成员的访问权限
通过派生类对象对基类成员的访问权限
公有继承:
基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成员不可直接访问。
四川大学各级各类考试的监考人员,必须严格执行《四川大学考试工作管理办法》、《四川大学考场规则》和《四川大学监考人员职责》。有违反学校有关规定的,严格按照《四川大学教学事故认定及处理办法》进行处理。
题号
一
二
三
四
五
六
七
八
九
十
平时
总分
得分
考试时间
年 月 日
阅卷教师签名
一.名词解释(共5小题,每题4分,共20分)
本质:不是重载声用,执行时会
根据指针指向的对象的类,决定调用哪个函数。
抽象类
带有纯虚函数的类称为抽象类:
class 类名
{
virtual 类型 函数名(参数表)=0;
//纯虚函数
...
}
作用
抽象类为抽象和设计的目的而声明,将有关的数据和行为组织在一个继承层次结构中,保证派生类具有要求的行为。
void fun();
void main()
{ fun();
fun();
}
void fun()
{ static int a=6;
int i=3;
a++;
i++;
cout<<"i="<<i<<",a="<<a<<endl;
派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。
通过派生类的对象只能访问基类的public成员。
私有继承
基类的public和protected成员都以private身份出现在派生类中,但基类的private成员不可直接访问。
派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。
四川大学计算机(软件)学院工程硕士考试试题
(2014—2015学年第 2学期)
课程号:课序号:课程名称:面向对象的技术与方法任课教师:李征
适用专业:软件工程适用年级:学生人数:印题份数:学号:姓名:
考 试 须 知
四川大学学生参加由学校组织或由学校承办的各级各类考试,必须严格执行《四川大学考试工作管理办法》和《四川大学考场规则》。有考试违纪作弊行为的,一律按照《四川大学学生考试违纪作弊处罚条例》进行处理。
{
ClassA temp(*this);
itsVal++;
return temp;
}
为区别前置和后置运算符,需要在后置运算符重载函数中加参数“int”,虽然这个类型在此除了以示区别之外并不代表任何实际含义;
如果要重载 ++为类成员函数,使之能够实现表达式 oprd++,其中 oprd 为A类对象,则 ++应被重载为 A 类的成员函数,且具有一个 int 类型形参。