C++填空与编程Word格式文档下载.docx
《C++填空与编程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C++填空与编程Word格式文档下载.docx(53页珍藏版)》请在冰豆网上搜索。
在C++语言中,编程的单位是__类__。
19.类是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的_数据成员_,共同行为被描述为类中的__成员函数__。
20.类的具体表现是通过定义_成员函数_来操作的。
21.对类中的成员函数和属性的访问是通过_private__、__public__和__protected_这3个关键字来控制的。
22.一般情况下,按照面向对象的要求,把类中的数据成员(属性)定义为__private__权限,而把成员函数(方法)定义为__public__权限。
23.在类定义中,数据和成员函数默认权限是__private__。
24.类中构造函数有__1个或N__个,析构函数有__1__个。
25.类中的构造函数是一个特殊的成员函数,它由类的对象__生成__时调用,它的作用是__初始化__。
26.在定义类的对象时,C++程序将自动调用该对象的_构造__函数初始化对象自身。
27.在撤销类的对象时,C++程序将自动调用该对象的_析构__函数。
28.__new__运算符对指定类型对象动态分配内存并返回__true或false__。
29.__delete__运算符删除动态分配的内存空间。
30.在类中定义和实现的函数称为_内联函数__。
31.非成员函数应声明为类的_友元函数__才能访问这个类的private成员。
面向对象编程程序设计复习题
二、编程题
1.试定义一个表示学生成绩的结构体,要求包含学号(no)、姓名(name)、数学成绩(math)、英语成绩(eng)、C++语言成绩(c)和三门课程的总分(sum),再定义两个变量(s1,s2)。
#include<
iostream>
usingnamespacestd;
structstudent
{
intno;
charname[20];
doublemath,eng,c;
doublesum;
};
intmain()
students1,s2;
return0;
}
2.定义结构体类型structcard,代表一张扑克牌的结构,结构体中包含两个成员:
牌的花色hua(定义字符类型)和面值no(定义整型),再定义一个结构变量deck,代表一张牌。
structcard
charhua;
carddeck={'
t'
13};
cout<
<
deck.hua<
'
\t'
deck.no<
endl;
3.定义一个第1题的结构体类型的结构体数组stud,输入学生三门课成绩,然后按总分成绩排序后输出学生成绩。
doublemath;
doubleeng;
doublec;
studenta={001,"
zhang"
78,86,99,(99+86+78)};
studentb={002,"
li"
89,64,60,(89+64+60)};
studentc={003,"
chen"
99,77,55,(55+77+99)};
studentd=a;
"
按总分排名如下:
if(b.sum>
a.sum)
{d=a;
a=b;
b=d;
}//确保a.sum>
=b.sum;
if(c.sum>
{
cout<
c.no<
ends<
c.name<
c.math<
c.eng<
c.c<
c.sum<
a.no<
a.name<
a.math<
a.eng<
a.c<
a.sum<
b.no<
b.name<
b.math<
b.eng<
b.c<
b.sum<
}
elseif(c.sum>
b.sum)
else
4.定义一个学生类,其中有3个数据成员:
学号、姓名、年龄,以及若干成员函数。
同时编写main函数使用这个类,实现对学生数据的赋值和输出。
#include<
string>
classstudent
intnum;
stringname;
intage;
public:
student(){num=0;
name='
\0'
;
age=0;
student(int,string,int);
voidshow();
student:
student(inta,stringb,intc):
num(a),name(b),age(c){}
voidstudent:
show()
studentnumber:
num<
name:
name<
age:
age<
students1(200803986,"
梅寒芳"
23);
s1.show();
5.计算两点之间的距离。
可以定义点类(Point),再定义一个类(Distance)描述两点之间的距离,其数据成员为两个点类对象,两点之间距离的计算可设计由构造函数来实现。
cmath>
classpoint
doublex,y;
public:
point():
x(0),y(0){}
point(doublea,doubleb):
x(a),y(b){}
doublegetx(){returnx;
doublegety(){returny;
voidsetx(){cin>
>
x;
voidsety(){cin>
y;
classDistance
pointa,b;
doubledis;
Distance();
Distance(point,point);
Distance:
Distance()
dis=0;
dis<
Distance(pointm,pointn)
a=m,b=n;
dis=sqrt(pow(a.getx()-b.getx(),2)+pow(a.gety()-b.gety(),2));
a.setx(),a.sety();
b.setx(),b.sety();
Distance(a,b);
6.编写一个程序,设计一个产品类Product,要求包含数据成员:
产品名称,产品单价,剩余产品数量,同时要求有构造函数,析构函数,显示剩余产品数量的成员函数。
//简洁写法:
//
////////////////////////////////////////////////
classProduct
doubleprice;
intleavings;
Product():
price(0),name("
\0"
),leavings(0){}
Product(stringa,doubleb,intc):
name(a),price(b),leavings(c){}
voidshow(){cout<
price<
voidshowl();
~Product(){}
voidProduct:
showl()
leavings:
leavings<
Producta("
computer"
3998,1);
a.show();
a.showl();
////////////////////////////////////////////////////
//复杂一点的算法:
////
///////////////////////////////////////////////////
iostream.h>
#include"
algorithm"
//由于<
不支持string,所以本类中的name是用数组装的。
//关于类中的数组初始化问题请注意。
price(0),leavings(0){memset(name,0,sizeof(name));
}//来自周老师
Product(chara[],doubleb,intc):
price(b),leavings(c){strcpy(name,a);
}//这一行也值得注意
friendistream&
operator>
(istream&
Product&
);
//只能重载为友元函数!
friendostream&
operator<
(ostream&
istream&
in,Product&
p)
in>
p.name>
p.price>
p.leavings;
returnin;
ostream&
out,Product&
out<
Productname:
p.name<
\n'
<
Productprice:
p.price<
Productleavings:
p.leavings<
returnout;
a<
Productb;
cin>
b;
7.定义盒子Box类,要求具有以下成员:
可设置盒子形状;
可计算盒子体积;
可计算盒子的表面积。
classbox
doublex,y,z;
box():
x(0),y(0),z(0){}
box(inta,intb,intc):
x(a),y(b),z(c){}
voidsetx(inta){x=a;
voidsety(inta){y=a;
voidsetz(inta){z=a;
doubleacea();
doublevolume();
doublebox:
acea()
return2*(x*y+y*z+z*x);
volume()
returnx*y*z;
boxbox_1(2,3,4);
acea="
box_1.acea()<
volume="
box_1.volume()<
******************"
box_1.setx(5);
box_1.sety(6);
8.编写一个程序计算两个给定的长方形的周长和面积,要求定义一个长方形rectangle的类。
#definepi3.14
classShape//抽象基类
Shape(){};
virtualdoubleGetArea(){return0;
virtual~Shape()=0;
classCircle:
publicShape//从抽象基类继承得到圆
intr;
Circle():
r(0){}
Circle(inta):
r(a){}
doubleGetArea(){returnpi*r*r;
classRectangle:
publicShape//从shape抽象类继承得到长方形类
intx,y;
Rectangle():
Rectangle(inta,intb):
doubleGetArea(){returnx*y;
classSquare:
publicRectangle//从长方形继承得到正方形(其实应该是长方形继承正方形更好,但是无奈题目要求这么来~~
Square():
Rectangle(){}
Square(inta):
Rectangle(a,1){}//注意这一行!
doubleGetArea(){returnpow(Rectangle:
GetArea(),2);
Squarea(10);
a.GetArea()<
9.声明一个Shape基类,在此基础上派生出Rectangle和Circle类,二者都有GetArea()函数计算对象的面积。
使用Rectangle类创建一个派生类正方形Square类。
//virtual~Shape()=0;
//这儿不好~一群殴去掉才能运行~我是画蛇添足了~但是这确实是个问题~~~
doubleGetArea(){returnx*y;
Shape*p;
//建立一个边长为10的正方形对象
p=&
a;
//两个不需要重载的运算符
p->
GetArea()<
//求面积
Rectangleb(5,6);
//建立一个长宽分别为5、6的长方型对象
Circlec(9);
//建立一个半径为9的圆对象
c;
10.声明一个哺乳动物Mammal类,再由此派生出狗Dog类,声明一个Dog类的对象,观察基类与派生类的构造函数与析构函数的调用顺序。
classmammal
mammal()//默认构造函数
mammal'
sconstructor"
~mammal()
adestucor"
classdog:
publicmammal
dog()
dog'
~dog()
sdestructor"
doga;
/*
1、结论:
先构造后析构,后构造先析构
2、子类会调用父类构造函数(细节自己试验去)
11.定义一个基类有姓名、性别、年龄,再由基类派生出教师类和学生类,教师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩。
classperson
charsex;
person(){}
person(string,char,int);
voidsetname(stringa){name=a;
}//这三个