C++简答题和编程题汇总-题库-2023修改整理_第1页
C++简答题和编程题汇总-题库-2023修改整理_第2页
C++简答题和编程题汇总-题库-2023修改整理_第3页
C++简答题和编程题汇总-题库-2023修改整理_第4页
C++简答题和编程题汇总-题库-2023修改整理_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

千里之行,始于足下让知识带有温度。第第2页/共2页精品文档推荐C++简答题和编程题汇总-题库C++简答题和编程题汇总

一、简答题:

1.有以下程序结构,请分析拜访属性。

classCA

{public:

voidfun1();

inti;

protected:

voidfun2();

intj;

private:

intk;

};

classCB:protectedCA

{public:

voidfun3();

protected:

intm;

private:

intn;

};

classCC:publicCB

{public:

voidfun4();

private:

intp;

};

intmain()

{CAa;

CBb;

CCc1;

return0;}

问:(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的成员k,由于它是私有数据成员,在类外不

能拜访。

(2)可以引用基类A中的数据成员i,j,由于它们在派生类中是公用成员和庇护成员,可以被派生类的成员函数拜访。不行以引用基类A中的数据成员k,它在派生类中是不行拜访的成员。

(3)可以调用成员函数f1,f3,f4,它们是公用成员函数。不能调用成员函数f2,由于它是庇护成员函数。

2.为什么要使用虚基类?怎样定义虚基类?用一个实例来解释虚基类在其派生类中的存储方式。

答:假如一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在终于的派生类中会保留该间接共同基类数据成员的多份同名成员。如图所示:

(a)派生关系(b)存储图

存储关系如(b),在职讨论生类有两个Person拷贝。

为避开这种状况,可使用虚基类。虚基类(virtualbaseclass)定义方式如下:class派生类名:virtual继承方式基类类名{...};

virtual关键字只对紧随其后的基类名起作用。

采纳虚基类后存储关系如下:

采纳虚基类后在职讨论生类储存图

3.请比较函数重载和虚函数在概念和使用方式方面有什么区分?

答:(1)函数重载可以用于一般函数(非成员函数)和成员函数,而虚函数只能用于类的成员函数;

(2)函数重载可以用于构造函数,而虚函数不能用于构造函数;

(3)假如对成员函数举行重载,则重载的函数与被重载的函数应该都是同一个类的成员函数,不能分属于两个不同继承层次的类。虚函数是对同一类族中基类和派生类的同名函数的处理,即允许在派生类中对基类的成员函数重新定义。

(4)重载的函数必需具有相同的函数名,但函数参数个数和参数类型二者中至少有一样不同。而虚函数则要求在同一族中的全部虚函数不仅函数名相同,而且要求函数类型、函数参数个数和参数类型都所有相同。

(5)重载的函数是在程序编译阶段确定操作对象的,属静态关联。虚函数是在程序运行阶段确定操作的对象的,属动态关联。

4.派生类的析构函数中需完成什么任务?是否要编写对基数和成员对象的析构函数的调用?为什么?

答:析构函数的功能是在对象被系统释放之前做须要的“清理现场”的工作,析构函数无返回类型也没有参数,状况比较容易。派生类析构函数定义格式与非派生类无任何差异,不要编写对基数和成员对象的析构函数的调用,只要在函数体内把派生类新增普通成员处理好就可以了,由于对新增的成员对象和基类的善后工作,系统会自己调用成员对象和基类的析构函数来完成。

5.容易讲述派生类与基类的赋值兼容规章。

答:凡是基类所能解决的问题,公有派生类都可以解决。在任何需要基类对象的地方都可以用公有派生类的对象来代替,这条规章称赋值兼容规章。它包括以下状况:

(1)派生类的对象可以赋值给基类的对象,这时是把派生类对象中从对应基类中继承来的成员赋值给基类对象。反过来不可,由于派生类的新成员无值可赋。

(2)可以将一个派生类的对象的地址赋给其基类的指针变量,但只能通过这个指针拜访派生类中由基类继承来的成员,不能拜访派生类中的新成员。同样也不能反过来做。

(3)派生类对象可以初始化基类的引用。引用是别号,但这个别号只能包含派生类对象中的由基类继承来的成员。

6.为什么析构函数总是要求说明为虚函数?

答:在基类中及其派生类中都动态分配内存空间时,必需把析构函数定义为虚函数,实现撤消对象时的多态性。按照赋值兼容规章可以用基类的指针指向派生类对象,假如由该指针撤销派生类对象,则必需将析构函数说明为虚函数,实现多态性,自动调用派生类析构函数。我们总是要求将类设计成通用的,无论其他程序员怎样调用都必需保证不出错,所以必需把析构函数定义为虚函数。

二、编程题

1.(类的声明和运算符重载)设计一个日期类Date,要求:

(1)可以建立具有指定日期(年、月、日)的Date对象,默认日期是2022.1.1。

(2)可以从输出流输出一个格式为“年-月-日”的日期,其中年是四位数据,月、日可以是一位也可以是两位数据。

(3)可以动态地设置年、月、日。

(4)可以用运算符==对两个日期举行是否相等的比较。

(5)在主函数中举行该类的测试。

2.编写一个程序,涉及一个类score用于统计一个班的同学成果,其中使用一个静态数据成员sumfenshu存储总分和一个静态成员函数Getsumfenshu()返回该总分。

3.用类模板方式设计一个栈类Stack,其中有两个私有数据成员s[](存放栈元素)和top(栈顶元素下标),以及三个公有成员函数push(元素入栈)、pop(元素出栈)和stackempty(推断栈是否为空),并建立一个整数栈和一个字符栈。

4.(类的声明和友元函数)设计一个程序,其中有三个类CBank、BBank、GBank,分离为中国银行类、工商银行类和农业银行类。每个类都包含一个私有数据balance用于存放储户在该行的存款数,另有一个友元函数max用于显示三家

编程题2的类结构

5.(类的继承和类的组合)实现两个类person类和scores类,其中person类

中包含了公有的个人基本信息,如姓名、性别和年龄等。scores类包含了公有的考试科目成员如语文、数学、英语等的成果。现要求实现一个student类,它继承自person类,并加入了私有的一个表示学号的新成员number和一个scores成员对象。要求:

(1)student类中的个人基本信息和成果单的拜访属性为私有;

(2)重载的student构造函数能接受person对象和score对象作为参数,也能接受直接给出的个人基本信息和成果信息作为参数。

(3)student类提供设置和拜访个人信息和成果的接口函数。

6.(虚函数)已知一个抽象基类person,其结构如下:

classperson

{public:

virtualvoidinfo()=0;

}

要求在person类的基础上派生一个student类和一个teacher类,并实现虚函数info(),它打印出同学和老师的个人信息。其中,同学的个人信息包括学号、姓名、年龄、性别和系别;老师的个人信息包括工号、姓名、年龄、性别和职称。另外,实现全局函数print(person*),它接受一个person类型的指针作为参数,调用person的info()函数,打印出person的个人信息。实例化student和teacher对象,对象的个人信息在定义对象时给定,用print()函数打印出他们的个人信息。

7.下列shape类是一个表示外形的抽象类,area()为求图形面积的函数,total()则是一个通用的用以求不同外形的图形面积总和的函数。请从shape类派生三角形类(triangle)、矩形类(rectangle),并给出详细的求面积函数。

#include

usingnamespacestd;

classshape{

public:

virtualdoublearea()const=0;

};

doubletotal(shape*s[],intn)

{

doublesum=0.0;

for(inti=0;iarea();

returnsum;

}

classTriangle:publicshape

{

public:

Triangle(doubleh,doublew){H=h;W=w;}

doublearea()const{returnH*W*0.5;}

private:

doubleH,W;

};

classRectangle:publicshape

{

public:

Rectangle(doubleh,doublew){H=h;W=w;}

doublearea()const{returnH*W;}

private:

doubleH,W;

};

intmain()

{

Triangletriangle1(4.0,3.3);

Rectanglerectangle1(5.0,4.0);

shape*arr[2]={

doublesum_area=total(arr,2);

cout

usingnamespacestd;

classBox

{public:

Box(floatl,floatw,floath):length(l),width(w),height(h){}

floatvolume();

voiddisplay();

public:

floatlength;

floatwidth;

floatheight;

};

floatBox::volume()

{return(length*width*height);}

voidBox::display()

{cout

usingnamespacestd;

template

Tmax(Ta[],intlength)

{Ttemp;

temp=a[0];

for(inti=1;i>a[i];

m=max(a,5);

cout>b[i];

n=max(b,5);

cout

#include

usingnamespacestd;

//定义公共基类Person

classPerson

{public:

virtualvoidinput()

{cin>>no>>name;}

virtualvoiddisplay()

{cout>title>>depart_no;}

voiddisplay()

{cout>class_no>>score;}

voiddisplay()

{coutinput();

p=

p->input();

coutdisplay();

p=

p->display();

coutinput();

p=

p->input();

coutdisplay();

p=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论