




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 c+ 简答题和编程题汇总一、简答题:1有以下程序结构,请分析访问属性。class ca public: void fun1( ); int i; protected: void fun2( ); int j; private: int k; ; class cb: protected ca public: void fun3( ); protected: int m; private: int n; ; class cc: public cb public: void fun4( ); private: int p; ; int main( ) ca a; cb b; cc c1; ret
2、urn 0; 问: ( 1 )派生类 cb中的成员函数能否引用基类ca 中的数据成员 i,j,k?( 2 )派生类 cc 中的成员函数能否调用基类ca 中的成员函数 fun1 和 fun2?( 3 ) 能 否 在main 函 数 中 用c.fun1(),c.fun2(),c.fun3() 和c.fun4() 调 用fun1,fun2,fun3,fun4 成员函数?答:( 1)可以用 b1.i 引用对象 b中的基类 a 的成员 i,因为它是公用数据成员。不能用 b1.j 引用对象 b 中的基类 a 的成员 j,因为它是保护数据成员,在类外不能访问。不能用 b1.k 引用对象 b 中的基类 a 的
3、成员 k,因为它是私有数据成员,在类外不能访问。(2)可以引用基类 a 中的数据成员 i,j,因为它们在派生类中是公用成员和保护成员,可以被派生类的成员函数访问。不可以引用基类a 中的数据成员 k,它在2 派生类中是不可访问的成员。(3)可以调用成员函数f1,f3,f4,它们是公用成员函数。不能调用成员函数f2,因为它是保护成员函数。2为什么要使用虚基类?怎样定义虚基类?用一个实例来解释虚基类在其派生类中的存储方式。答:如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多份同名成员。如图所示:class personint no身份
4、证号,class studentint no学生号,class gstudentint no研究生号,class personint no身份证号,class employeeint no工作证号,class egstudentint no在职学号,(a) 派生关系person 成员student新成员gstudent新成员person成员employee新成员egstudent 新成员personstudentpersonemployeegstudentegstudent(b) 存储图存储关系如 (b),在职研究生类有两个person拷贝。为避免这种情况,可使用虚基类。虚基类(virtual
5、 base class )定义方式如下:class 派生类名 :virtual 继承方式 基类类名 .; virtual 关键字只对紧随其后的基类名起作用。采用虚基类后存储关系如下:3 采用虚基类后在职研究生类储存图student gstudent egstudent person student新成员gstudent新成员person employee 新成员person成员egstudent新成员person person employe3请比较函数重载和虚函数在概念和使用方式方面有什么区别?答:( 1)函数重载可以用于普通函数(非成员函数)和成员函数,而虚函数只能用于类的成员函数;(2)
6、函数重载可以用于构造函数,而虚函数不能用于构造函数;(3)如果对成员函数进行重载,则重载的函数与被重载的函数应当都是同一个类的成员函数,不能分属于两个不同继承层次的类。虚函数是对同一类族中基类和派生类的同名函数的处理,即允许在派生类中对基类的成员函数重新定义。(4)重载的函数必须具有相同的函数名,但函数参数个数和参数类型二者中至少有一样不同。而虚函数则要求在同一族中的所有虚函数不仅函数名相同,而且要求函数类型、函数参数个数和参数类型都全部相同。(5)重载的函数是在程序编译阶段确定操作对象的,属静态关联。虚函数是在程序运行阶段确定操作的对象的,属动态关联。4派生类的析构函数中需完成什么任务?是否
7、要编写对基数和成员对象的析构函数的调用?为什么?答:析构函数的功能是在对象被系统释放之前做必要的“清理现场”的工作,析构函数无返回类型也没有参数,情况比较简单。派生类析构函数定义格式与非派生类无任何差异,不要编写对基数和成员对象的析构函数的调用,只要在函数体内把派生类新增一般成员处理好就可以了,因为对新增的成员对象和基类的善后工作,系统会自己调用成员对象和基类的析构函数来完成。5简单叙述派生类与基类的赋值兼容规则。答:凡是基类所能解决的问题,公有派生类都可以解决。在任何需要基类对象的地方都可以用公有派生类的对象来代替,这条规则称赋值兼容规则。它包括以下情况:(1)派生类的对象可以赋值给基类的对
8、象,这时是把派生类对象中从对应基类中继承来的成员赋值给基类对象。反过来不行,因为派生类的新成员无值可赋。4 (2) 可以将一个派生类的对象的地址赋给其基类的指针变量,但只能通过这个指针访问派生类中由基类继承来的成员,不能访问派生类中的新成员。同样也不能反过来做。(3) 派生类对象可以初始化基类的引用。引用是别名,但这个别名只能包含派生类对象中的由基类继承来的成员。6为什么析构函数总是要求说明为虚函数?答:在基类中及其派生类中都动态分配内存空间时,必须把析构函数定义为虚函数,实现撤消对象时的多态性。根据赋值兼容规则可以用基类的指针指向派生类对象,如果由该指针撤销派生类对象,则必须将析构函数说明为
9、虚函数,实现多态性,自动调用派生类析构函数。我们总是要求将类设计成通用的,无论其他程序员怎样调用都必须保证不出错,所以必须把析构函数定义为虚函数。二、编程题1 (类的声明和运算符重载)设计一个日期类date,要求:( 1) 可 以 建立 具 有 指定 日 期 ( 年 、月 、 日 ) 的 date 对 象 , 默 认 日 期 是2007.1.1。(2)可以从输出流输出一个格式为“年-月-日”的日期,其中年是四位数据,月、日可以是一位也可以是两位数据。(3)可以动态地设置年、月、日。(4)可以用运算符 = =对两个日期进行是否相等的比较。(5)在主函数中进行该类的测试。2编写一个程序,涉及一个类
10、score 用于统计一个班的学生成绩,其中使用一个静态数据成员sumfenshu 存储总分和一个静态成员函数getsumfenshu() 返回该总分。3用类模板方式设计一个栈类stack,其中有两个私有数据成员s(存放栈元素)和 top(栈顶元素下标),以及三个公有成员函数push(元素入栈)、 pop(元素出栈)和stackempty (判断栈是否为空),并建立一个整数栈和一个字符栈。4 (类的声明和友元函数)设计一个程序,其中有三个类cbank、bbank、gbank,分别为中国银行类、工商银行类和农业银行类。每个类都包含一个私有数据 balance 用于存放储户在该行的存款数,另有一个友
11、元函数max 用于显示三家银行中存款最多的银行和存款数。类结构如图所示:类类类clankintblancebbankintblancegbankintblancetotal()函数友元函数友元函数友元函数编程题 2 的类结构5(类的继承和类的组合)实现两个类person类和 scores类,其中 person类中5 包含了公有的个人基本信息,如姓名、性别和年龄等。scores类包含了公有的考试科目成员如语文、数学、英语等的成绩。现要求实现一个student类,它继承自person 类,并加入了私有的一个表示学号的新成员number 和一个 scores成员对象。要求:(1)student类中的
12、个人基本信息和成绩单的访问属性为私有;(2)重载的 student构造函数能接受 person对象和 score对象作为参数,也能接受直接给出的个人基本信息和成绩信息作为参数。(3)student类提供设置和访问个人信息和成绩的接口函数。6(虚函数)已知一个抽象基类person,其结构如下:class person public: virtual void info()=0; 要求在person 类的基础上派生一个student 类和一个teacher类,并实现虚函数info() ,它打印出学生和教师的个人信息。其中,学生的个人信息包括学号、姓名、年龄、性别和系别;教师的个人信息包括工号、姓名
13、、年龄、性别和职称。另外,实现全局函数print(person*),它接受一个person类型的指针作为参数,调用 person的 info()函数,打印出person的个人信息。实例化student和 teacher对象,对象的个人信息在定义对象时给定,用print()函数打印出他们的个人信息。7下列 shape类是一个表示形状的抽象类,area( )为求图形面积的函数, total( )则是一个通用的用以求不同形状的图形面积总和的函数。请从shape类派生三角形类(triangle)、矩形类( rectangle ) ,并给出具体的求面积函数。#include using namespac
14、e std; class shape public: virtual double area() const=0; ; double total(shape *s,int n) double sum=0.0; for(int i=0;iarea(); return sum; class triangle:public shape public: triangle(double h,double w)h=h;w=w; double area() constreturn h*w*0.5; 6 private: double h,w; ; class rectangle:public shape p
15、ublic: rectangle(double h,double w)h=h;w=w; double area()constreturn h*w; private: double h,w; ; int main() triangle triangle1(4.0,3.3); rectangle rectangle1(5.0,4.0); shape *arr2=&triangle1,&rectangle1; double sum_area=total(arr,2); couttotal area=sum_areaendl; return 0; 8编写程序,需要求3 个长方柱的体积,
16、请编写一个基于对象的程序。数据成员包括 length(长)、width(宽)、 height(高)。要求用成员函数实现以下功能:(1) 定义构造函数完成长方柱的初始化;(2) 计算长方柱的体积;(3) 输出长方柱的体积。#include using namespace std; class box public: box(float l,float w,float h):length(l),width(w),height(h) float volume(); void display(); public: float length; float width; float height; ; f
17、loat box:volume() return(length*width*height); void box:display() coutvolume()endl; 7 int main() box box1(3,2,1),box2(4,3,2),box3(5,4,3); coutvolmue of box1 is ; box1.display(); coutvolmue of box2 is ; box2.display(); coutvolmue of box3 is ; box3.display(); return 0; 9设计一个函数模板求一个数组中最大的元素,并以整数数组和字符数组
18、进行调试。#include using namespace std; template t max(t a,int length) t temp; temp=a0; for(int i=1;ilength;i+) if(tempai) temp=ai; return temp; int main() int a5,m; coutplease input 5 numbers endl; for( int i=0;iai; m=max(a,5); coutmax=mendl; char b5,n; coutplease input 5 char endl; 8 for( i=0;ibi; n=ma
19、x(b,5); coutmax=nendl; return 0; 10编写一个学生和教师数据输入和显示程序,学生数据要求有编号、姓名、班级和成绩,教师数据有编号、姓名、部门和职称。要求将编号、姓名的输入和显示设计成一个类 person,并作为学生数据操作类student和教师数据操作类teacher的基类,学生数据中的班级和成绩的输入和显示在student 类中实现,教师数据中的部门和职称的输入和显示在teacher类中实现。最后在主函数中进行该类的测试。(14分)下面给出了基类 person的主要成员:(1) 私有成员: int no;编号 string name; 姓名(2) 公有成员:
20、void input(); 编号和姓名的输入 void display(); 编号和姓名的显示#include #include using namespace std; /定义公共基类 person class person public: virtual void input() cinnoname; virtual void display() coutno=no name=nametitledepart_no; void display() couttitle=title department=depart_noclass_noscore; void display() coutcla
21、ss_no=class_no score=scoreendl; private: int class_no; float score; ; int main( ) person person; person *p; teacher teacher; student student; coutplease input teachers no,name,title and department:input(); p=&teacher; 10 p-input(); coutdisplay teachers no,name,title and department:display(); p=&teacher; p-display(); coutp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络管理员项目管理试题及答案总结
- 软件需求分析的关键技能试题及答案
- 广东省佛山市名校2025届数学七下期末考试试题含解析
- 2025届江苏省东台市第二联盟数学七下期末质量跟踪监视试题含解析
- 有效应对2025年软考试题及答案
- 公司战略价值创造试题及答案
- 2025年风险管理策略与公司发展试题及答案
- 网络管理员考试难点攻克试题及答案
- 企业跨界竞争下的战略选择试题及答案
- 辽宁省盘锦市双台子区第四中学2025届八下数学期末预测试题含解析
- 村庄保洁服务 投标方案(技术标)
- 高铁项目施工总体方案
- 江苏省苏州市吴江区2023-2024学年六年级下学期期末检测语文试卷
- 用建构主义理论分析案例
- 《民航客舱设备操作与管理》课件-项目四 飞机舱门及撤离滑梯
- 三年级下册语文【课文说明道理及主人公品质】归纳
- 热力公司关于深刻把握国有经济和国有企业高质量发展根本遵循研讨发言提纲范文
- 国家开放大学《心理健康教育》形考任务1-9参考答案
- 第5课 中古时期的非洲和美洲(课件)
- 康美药业审计风险分析
- 赛事承办合同
评论
0/150
提交评论