C++题目x答案.docx
《C++题目x答案.docx》由会员分享,可在线阅读,更多相关《C++题目x答案.docx(14页珍藏版)》请在冰豆网上搜索。
![C++题目x答案.docx](https://file1.bdocx.com/fileroot1/2022-11/27/ef8a98ed-a898-46fd-be64-5bc71fa982bb/ef8a98ed-a898-46fd-be64-5bc71fa982bb1.gif)
C++题目x答案
1、设计一个程序:
定义一个圆类,有数据成员半径radis(半径),计算圆的面积和周长,写出主函数测试你编写的类。
2、#include
3、usingnamespacestd;
4、
5、floatpi=3.14;
6、classR
7、{public:
8、floatradis;
9、floatgetMJ(){returnradis*radis*pi;}
10、floatgetZC(){returnradis*2*pi;}
11、R(floatin){radis=in;}
12、};
13、
14、voidmain()
15、{
16、Rr(10);
17、cout<<"半径:
10\n周长:
"<"<18、}
19、
2编写一个程序。
用名为max的函数模板计算三个参数中的最大值,用整数、字符和浮点数测试所编写的程序。
20、#include
21、usingnamespacestd;
22、
23、template
24、OMax(Oa,Ob,Oc){returna>b?
a>c?
a:
c:
b>c?
b:
c;}
25、
26、voidmain()
27、{
28、cout<29、cout<30、cout<31、}
32、设计一个立方体类Box,它能计算并输出立方体的体积和表面积。
33、#include
34、usingnamespacestd;
35、
36、classBox
37、{public:
38、floatL;
39、floatgetBMJ(){returnL*L*6;}
40、floatgetTJ(){returnL*L;}
41、Box(floatin){L=in;}
42、};
43、
44、voidmain()
45、{
46、Boxr(10);
47、cout<<"边长:
10\n表面积:
"<"<48、}
4、编写一个程序计算“三角形、正方形、圆形”三种图形的面积。
要求:
a)抽象出一个基类base;
b)在其中说明一个虚函数用来求面积;
c)利用派生类定义“三角形、正方形、圆形”;
d)编写主函数并测试。
1.#include
2.usingnamespacestd;
3.
4.classbase
5.{public:
6.virtualfloatgetMJ(){returnH*W;}
7.floatH,W;
8.};
9.
10.classR:
publicbase
11.{public:
12.floatgetMJ(){returnH*H*3.14;}
13.R(floatin){H=in;}
14.};
15.
16.classA:
publicbase
17.{public:
18.floatgetMJ(){return(H*W)/2;}
19.A(floatin_H,floatin_w){H=in_H;W=in_w;}
20.};
21.
22.classS:
publicbase
23.{public:
24.floatgetMJ(){returnH*H;}
25.S(floatin){H=in;}
26.};
27.
28.voidmain()
29.{
30.Rr(10);
31.Aa(10,5);
32.Ss(10);
33.cout<<"圆:
边长:
10\n面积:
"<34.<<"\n三角:
高:
10,底:
5\n面积:
"<35.<<"\n正方形:
边长:
10\n面积:
"<36.}
5、定义一个处理日期的类TDate,它有3个私有数据成员:
Month,Day,Year和若干个公有成员函数,并实现如下要求:
①构造函数重载;②成员函数设置缺省参数;③定义一个友元函数来打印日期;④定义一个非静态成员函数设置日期;⑤可使用不同的构造函数来创建不同的对象。
1.include
2.usingnamespacestd;
3.
4.classTDate
5.{
6.public:
7.TDate():
Year(1900),Month
(1),Day
(1){;}
8.TDate(intY,intM=1,intD=1){Month=M;Day=D;Year=Y;}
9.voidset(intY=1990,intM=1,intD=1){Month=M;Day=D;Year=Y;}
10.friendvoidshow(TDate&in);
11.private:
12.intMonth,Day,Year;
13.};
14.
15.voidshow(TDate&in){cout<16.
17.voidmain()
18.{
19.TDatet1;
20.TDatet2(2014);
21.TDatet3(2015,6,5);
22.show(t1);
23.show(t2);
24.show(t3);
25.
26.t3.set(1999);
27.show(t3);
28.}
6、编程实现抽象类Employee,派生类Manger和HourlyWorker,Employee有数据成员姓名name和工号ID,Manger有数据成员sal,代表经理的月工资,HourlyWorker有wage和hours,分别代表钟点工的每小时的工资数和月工作时数,定义的所有类中必须包含构造函数、析构函数、修改和获取所有数据成员的成员函数,以及虚函数来计算职员的工资、输出职员的姓名name和工号ID。
1.#include
2.#include
3.usingnamespacestd;
4.
5.classEmployee
6.{public:
7.stringname;
8.intid;
9.virtualintgetSal(){return0;}
10.Employee():
name("未命名"),id(0){};
11.~Employee(){cout<<"析构\n";}
12.voidset(stringN,intI){id=I;name=N;}
13.voidshowSal()
14.{
15.cout<<"\n姓名:
"<16.<<"工号:
"<17.<<"工资:
"<18.}
19.};
20.
21.classManger:
publicEmployee
22.{
23.public:
24.Manger(intS){sal=S;}
25.intgetSal(){returnsal;}
26.intsal;
27.};
28.classHourlyWorker:
publicEmployee
29.{
30.public:
31.HourlyWorker(intW,intH){wage=W;hours=H;}
32.intgetSal(){returnwage*hours;}
33.intwage,hours;
34.};
35.
36.
37.voidmain()
38.{
39.HourlyWorkerh(10,20);
40.h.set("小时工A",777);
41.h.showSal();
42.Mangerm(999);
43.m.set("经理A",888);
44.m.showSal();
45.}
1.
8、回答下面问题。
下面列出了由三个文件main.cpp、MyClass.h和MyClass.cpp组成的一个程序。
文件main.cpp中实现了主函数;文件MyClass.h中定义了类MyClass;文件MyClass.cpp中实现了类MyClass的成员函数。
题中没有给出三个文件的完整实现。
仔细阅读所给的程序,根据题意补充文件MyClass.h和文件MyClass.cpp的内容。
要求:
a.将成员变量定义为私有的;
b.不要增加题中没有用到的类成员。
1./********************************************************/
2.//文件main.cpp
3.#include
4.#include"MyClass.h"
5.voidmain()
6.{
7. MyClassobj(3.3);
8. cout<9. obj.SetMember(5.6);
10. cout<11.}
12./***********************************************************************/
13./文件MyClass.cpp
14.#include"MyClass.h"
15.floatMyClass:
:
GetMember()
16.{
17.returnmember;
18.}
19.voidMyClass:
:
SetMember(floatmember)
20.{
21.MyClass:
:
member=member;
22.}
23.//在这里写出构造函数的实现函数
24.
25.MyClass:
:
MyClass(floatin)
26.{
27.Member=in;
28.}
29.
30./***********************************************************************/
31.//文件MyClass.h
32.//类MyClass的定义
33.classMyClass{
34.//在下面写出类的定义体
35.public:
36.MyClass(floatin)
37.floatGetMember();
38.voidSetMember(floatmember);
39.private:
40.floatmember;
41.};
10、某公司雇员(employee)包括经理(manager),技术人员(technician)和销售员(salesman)。
开发部经理(developermanger),既是经理也是技术人员。
销售部经理(salesmanager),既是经理也是销售员。
以employ类为虚基类派生出manager,technician和salesman类;再进一步派生出developermanager和salesmanager类。
employee类的属性包括姓名、职工号、工资级别,月薪(实发基本工资加业绩工资)。
操作包括月薪计算函数(pay()),该函数要求输入请假天数,扣去应扣工资后,得出实发基本工资。
technician类派生的属性有每小时附加酬金和当月工作时数,及研究完成进度系数。
业绩工资为三者之积。
也包括同名的pay()函数,工资总额为基本工资加业绩工资。
salesman类派生的属性有当月销售额和酬金提取百分比,业绩工资为两者之积。
也包括同名的pay()函数,工资总额为基本工资加业绩工资。
manager类派生属性有固定奖金额和业绩系数,业绩工资为两者之积。
工资总额也为基本工资加业绩工资。
而developermanager类,pay()函数是将作为经理和作为技术人员业绩工资之和的一半作为业绩工资。
salesamanager类,pay()函数则是经理的固定奖金额的一半,加上部门总销售额与提成比例之积,这是业绩工资。
编程实现工资管理。
特别注意pay()的定义和调用方法:
先用同名覆盖,再用运行时多态。
同第6题
9、以点(point)类为基类,重新定义矩形类和圆类。
点为直角坐标点,矩形水平放置,由左下方的顶点和长宽定义。
圆由圆心和半径定义。
派生类操作判断任一坐标点是在图形内,还是在图形的边缘上,还是在图形外。
缺省初始化图形退化为点。
要求包括拷贝构造函数。
编程测试类设计是否正确。
1.#include
2.#include
3.usingnamespacestd;
4.constdoublePI=3.1415926535;
5.classPoint{
6.private:
7.doublex,y;
8.public:
9.Point(){x=0;y=0;}
10.Point(doublexv,doubleyv){x=xv;y=yv;}
11.Point(Point&pt){x=pt.x;y=pt.y;}
12.doublegetx(){returnx;}
13.doublegety(){returny;}
14.doubleArea(){return0;}
15.voidShow(){cout<<"x="<16.};
17.classCircle:
publicPoint{
18.doubleradius;
19.public:
20.Circle(){radius=0;}
21.Circle(doublexv,doubleyv,doublevv):
Point(xv,yv){radius=vv;}
22.Circle(Circle&cc):
Point(cc){radius=cc.radius;}//拷贝构造函数
23.doubleArea(){returnPI*radius*radius;}
24.voidShow(){//注意怎样访问基类的数据成员
25.cout<<"x="<26.}
27.intposition(Point&pt){
28.doubledistance=sqrt((getx()-pt.getx())*(getx()-pt.getx())
29.+(gety()-pt.gety())*(gety()-pt.gety()));
30.doubles=distance-radius;
31.if(s==0)return0;//在圆上
32.elseif(s<0)return-1;//在圆内
33.elsereturn1;//在圆外
34.}
35.};
36.classRectangle:
publicPoint{
37.doublewidth,length;
38.public:
39.Rectangle(){width=0;length=0;}
40.Rectangle(doublexv,doubleyv,doublewv,doublelv):
Point(xv,xv){
41.width=wv;
42.length=lv;
43.}
44.Rectangle(Rectangle&rr):
Point(rr){
45.width=rr.width;
46.length=rr.length;
47.}
48.doubleArea(){returnwidth*length;}
49.voidShow(){
50.cout<<"x="<51.}
52.intposition(Point&pt);
53.};
54.intRectangle:
:
position(Point&pt){
55.doubles1,s2;
56.s1=(pt.getx()-getx());s2=(pt.gety()-gety());
57.if(((s1==0||s1==width)&&s2<=length)||((s2==0||s2==length)&&s1<=width))return0;
58.elseif(s159.elsereturn1;//1在矩形外
60.}
61.intmain(){
62.Circlecc1(3,4,5),cc2,cc3(cc1);
63.Rectanglert1(0,0,6,8),rt2,rt3(rt1);
64.Pointp1(0,0),p2(6,8),p3(3,3),p4(8,4),p5(8,8);
65.cc1.Show();
66.cc2.Show();
67.rt1.Show();
68.rt2.Show();
69.cout<<"点p1:
";
70.p1.Show();
71.cout<<"矩形rt3:
"<<'\t';
72.rt3.Show();
73.switch(rt3.position(p1)){
74.case0:
cout<<"在矩形上"<75.case-1:
cout<<"在矩形内"<76.case1:
cout<<"在矩形外"<77.}
78.cout<<"圆cc3:
"<<'\t';
79.cc3.Show();
80.switch(cc3.position(p1)){
81.case0:
cout<<"在圆上"<82.case-1:
cout<<"在圆内"<83.case1:
cout<<"在圆外"<84.}
85.cout<<"点p2:
";
86.p2.Show();
87.cout<<"矩形rt3:
"<<'\t';
88.rt3.Show();
89.switch(rt3.position(p2)){
90.case0:
cout<<"在矩形上"<91.case-1:
cout<<"在矩形内"<92.case1:
cout<<"在矩形外"<93.}
94.cout<<"圆cc3:
"<<'\t';
95.cc3.Show();
96.switch(cc3.position(p2)){
97.case0:
cout<<"在圆上"<98.case-1:
cout<<"在圆内"<99.case1:
cout<<"在圆外"<100.}
101.cout<<"点p3:
";
102.p3.Show();
103.cout<<"矩形rt3:
"<<'\t';
104.rt3.Show();
105.switch(rt3.position(p3)){
106.case0:
cout<<"在矩形上"<107.case-1:
cout<<"在矩形内"<108.case1:
cout<<"在矩形外"<109.}
110.cout<<"圆cc3:
"<<'\t';
111.cc3.Show();
112.switch(cc3.position(p3)){
113.case0:
cout<<"在圆上"<114.case-1:
cout<<"在圆内"<115.case1:
cout<<"在圆外"<116.}
117.cout<<"点p4:
";
118.p4.Show();
119.cout<<"矩形rt3:
"<<'\t';
120.rt3.Show();
121.switch(rt3.position(p4)){
122.case0:
cout<<"在矩形上"<123.case-1:
cout<<"在矩形内"<124.case1:
cout<<"在矩形外"<125.}
126.cout<<"圆cc3:
"<<'\t';
127.cc3.Show();
128.switch(cc3.position(p4)){
129.case0:
cout<<"在圆上"<130.case-1:
cout<<"在圆内"<131.case1:
cout<<"在圆外"<132.}
133.cout<<"点p5:
";
134.p5.Show();
135.cout<<"矩形rt3:
"<<'\t';
136.rt3.Show();
137.switch(rt3.positio