C++实验代码Word格式.docx
《C++实验代码Word格式.docx》由会员分享,可在线阅读,更多相关《C++实验代码Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
①将数据成员改为私有的;
②将输入和输出的功能改为由成员函数实现;
③在类体内定义成员函数。
然后编译和运行程序。
请分析什么成员应指定为公用的?
什么成员应指定为私有的?
什么函数最好放在类中定义?
什么函数最好放在类外定义?
代码:
/实验_1.cpp:
定义控制台应用程序的入口点。
#include"
stdafx.h"
#include<
usingnamespacestd;
{
private:
//数据成员为私有的
inthour;
intminute;
public:
voidInput()
cout<
"
请输入时、分、秒:
hour>
minute>
sec;
voidprint()
时间为:
hour<
:
minute<
"
sec<
int_tmain(intargc,_TCHAR*argv[])
Timet1;
t1.Input();
t1.print();
return0;
结果:
(2)修改实验1中的学生成绩管理系统,建立类OurClass,实现班级学生信息的输入,排序和输出。
要求:
添加构造函数,初始化班级名称,将成员函数定义在类外,类的定义单独放在头文件中。
头文件:
#defineN3
structStudent
longlNum;
charsName[12];
floatcGrade;
floatccGrade;
floatfGrade;
classOurClass
charcName[20];
Studentstu[N];
OurClass:
OurClass();
voidInput();
voidprint();
voidSort();
.cpp:
//学生成绩管理.cpp:
iostream"
student.h"
intmain()
OurClassc1;
c1.Input();
c1.Sort();
endl<
排序结果为:
c1.print();
OurClass()//(charNme[20])
{
请输入班级名称:
cin>
cName;
voidOurClass:
Input()
inti;
输入"
N<
个学生的学号、姓名和成绩"
for(i=0;
i<
N;
i++)
stu[i].lNum>
stu[i].sName>
stu[i].cGrade>
stu[i].ccGrade;
stu[i].fGrade=stu[i].cGrade+stu[i].ccGrade;
}
Sort()
inti,j;
StudentTemp;
for(j=i+1;
j<
j++)
if(stu[i].fGrade<
stu[j].fGrade)
Temp=stu[i];
stu[i]=stu[j];
stu[j]=Temp;
print()
班级名称:
;
cName<
学号姓名成绩"
stu[i].lNum<
stu[i].sName<
stu[i].fGrade<
(3)需要求3个长方柱的体积(用对象数组完成),请编一个基于对象的程序。
数据成员包括length(长)、width(宽)、height(高)。
要求用成员函数实现以下功能:
①由键盘分别输入3个长方柱的长、宽、高;
②计算长方柱的体积;
③输出3个长方柱的体积。
请编程序,上机调试并运行。
完成后,将其中的数组名当常量指针用。
classcube
doublelength;
doublewidth;
doubleheight;
cube();
voidinput();
doublevolume();
//求长方柱的体积.cpp:
cube.h"
voidcube:
input()
cube:
cube()
{cout<
请输入长方柱的长、宽、高:
length>
width>
height;
doublecube:
volume()
returnlength*width*height;
print()
长方柱的体积为:
volume()<
cubec[3];
for(inti=0;
3;
c[i].input();
(c+i)->
print();
(4)友元函数
classDate;
//对Date类的提前引用声明
Time(int,int,int);
voiddisplay(Date&
);
//display是成员函数,形参是Date类对象的引用
private:
classDate//声明Date类
Date(int,int,int);
friendvoidTime∷display(Date&
//声明Time中的display函数为友元成员函数
intmonth;
intday;
intyear;
Time∷Time(inth,intm,ints)//类Time的构造函数
{hour=h;
minute=m;
sec=s;
voidTime∷display(Date&
d)//display的作用是输出年、月、日和时、分、秒
{cout<
d.month<
“/”<
d.day<
d.year<
//引用Date类对象中的私有数据
“:
//引用本类对象中的私有数据
Date∷Date(intm,intd,inty)//类Date的构造函数
{month=m;
day=d;
year=y;
{Timet1(10,13,56);
//定义Time类对象t1
Dated1(12,25,2004);
//定义Date类对象d1
t1.display(d1);
//调用t1中的display函数,实参是Date类对象d1
请读者分析和运行此程序,注意友元函数Time:
display的作用。
将程序中的display函数不放在Time类中,而作为类外的普通函数,然后分别在Time和Date类中将display声明为友元函数。
在主函数中调用display函数,display函数分别引用Time和Date两个类的对象的私有数据,输出年、月、日和时、分、秒。
修改后上机调试和运行。
//实验_4.cpp:
friendvoiddisplay(Date&
Time&
//voiddisplay(Date&
Time:
Time(inth,intm,ints)//类Time的构造函数
hour=h;
minute=m;
sec=s;
d,Time&
t1)//display变为普通函数
/"
:
Date:
Date(intm,intd,inty)//类Date的构造函数
Timet1(10,13,56);
display(d1,t1);
实验项目三函数重载
(1)编写程序,实现普通函数重载练习。
求三角型,矩形,圆形的面积和周长,其中面积函数和周长函数重载。
classZhc//Area.h
doublea,b,c;
doubler;
Zhc(doublea,doubleb,doublec);
Zhc(doublea,doubleb);
Zhc(doubler);
classArea//Area.h
Area(doublea,doubleb,doublec);
Area(doublea,doubleb);
Area(doubler);
//三角形等面积及周长.cpp:
Area.h"
Zhc.h"
math.h"
请输入三角形的三条边a,b,c:
a>
b>
c;
三角形的面积为:
sqrt((a+b+c)/2*((a+b+c)/2-a)*((a+b+c)/2-b)*((a+b+c)/2-c))<
三角形的周长为:
a+b+c<
请输入矩形的两条边a,b:
a>
b;
矩形的面积为:
a*b<
矩形的周长为:
2*(a+b)<
请输入圆的半径:
r;
圆的面积为:
r*r*3.14<
圆的周长为:
2*r*3.14<
doubleArea(doublea,doubleb,doublec)
returnsqrt((a+b+c)/2*((a+b+c)/2-a)*((a+b+c)/2-b)*((a+b+c)/2-c));
doubleArea(doublea,doubleb)
returna*b;
doubleArea(doubler)
returnr*r*3.14;
doubleZhc(doublea,doubleb,doublec)
returna+b+c;
doubleZhc(doublea,doubleb)
return2*(a+b);
doubleZhc(doubler)
return2*r*3.14;
(2)编写程序,(注意复数构造函数的重载及构造函数分带默认参数和不带默认参数的情况)
求两个复数的和,复数考虑有实部和虚部、无实部、无虚部三种情况
#defineN2
classComplex
doublereal;
doubleimag;
Complex(doubler=0,doublei=0);
voidPrint();
friendComplexAdd(Complexc1,Complexc2);
//复数相加.cpp:
complex.h"
Complextotal=0;
Complexc[N];
for(intm=0;
m<
m++)
请输入第"
m+1<
个复数:
c[m].Input();
total=Add(total,c[m]);
复数相加的结果是:
total.Print();
Complex:
Complex(doubler,doublei)
real=r;
imag=i;
voidComplex:
Input()
real>
imag;
real;
if(imag>
0)
{
+"
imag<
i"
elseif(imag==0)
ComplexAdd(Complexc1,Complexc2)
c1.real=c1.real+c2.real;
c1.imag=c1.imag+c2.imag;
returnc1;
Print()
if(imag!
=0)
(3)以上实验做完,练习书上的例题。
实验项目四常量与引用
1、有关const的上机内容:
(1)、运行课本中的例4-5,分析查看,然后逐个将程序中的const删除,分析运行的结果;
//student.h
#ifndefSTUDENT_H_
#defineSTUDENT_H_
classStudent{
intNo;
charName[20];
public:
Student();
intGetNo();
char*GetName();
#endif
//student.cpp
string.h>
Student:
Student(){
No=1;
strcpy(Name,"
wang"
intStudent:
GetNo(){
returnNo;
char*Student:
GetName(){
returnName;
//例_5.cpp:
Students1;
s1.GetNo();
s1.GetName();
Students2;
s2.GetNo();
//s2.GetName();
(2)、运行课本中的例4-10与例4-11,对比两个程序中指针和引用。
例4-10:
//例_10.cpp:
voidchangpointer1(int**x)
(*x)++;
**x=1;
voidchangpointer2(int*&
x)
x++;
*x=2;
intiData[3]={0};
int*p=iData;