1、 《面向对象程序设计(C++)》课程实验指导书 安阳工学院计算机科学与信息工程学院 软件工程教研室 2023.9 编 号: 课程总学时: 64 实验学时: 32 课程总学分: 3.5 实验学分: 先修课程:C语言程序设计 合用专业:计算机科学与技术,网络工程,软件工程 一、 本课程实验的重要目的与任务 《面向对象程序设计(C++)》是计算机专业学生的一门专业基础课。C++是一种高效而又实用的程序设计语言,它既可以进行过程化程序
2、设计,也可以进行面向对象程序设计,因此成为了编程人员最广泛使用的工具。重要任务是介绍C++语言中的数据类型,运算,语句结构及其程序设计的基本方法。使学生掌握一门高级程序设计语言,了解面向对象程序设计的基本概念与方法,进而学会运用C++语言学会解决一般应用问题,从而掌握面向对象程序设计的基本知识和基本技能。并为后续的专业课程奠定程序设计基础。 实验1 C++基础 一、实验目的 1.加强学生掌握C++的基本知识点; 2.加强学生掌握I/O流; 3 加强学生进一步理解函数的用法; 4 理解引用的概念及应用。 三、实验内容 1.用函数返回值实现记录A
3、类学生和B类学生个数,平均分大于等于80的为A类,其余为B类。
四. 实验指导
1.参考程序:
#include 4、t < 5、
cout < 6、" < 7、stream.h>
#include 8、loat r;
float z,s;
cout<<"请输入圆的半径r=";
cin>>r;
z=2*PI*r;
s=PI*r*r;
cout<<"圆的周长为: "< 9、00,78,81},
{62,68,69,75},
{85,85,77,91}};
int& level(int grade[], int size, int& tA, int& tB);
int main()
{
int typeA=0,typeB=0;
int student=6;
int gradesize=4;
for(int i=0; i 10、//函数调用作为左值
cout <<"number of type A is " < 11、
if(sum>=80)
return tA; //type A student
else
return tB; //type B student
}
运营结果:
实验2 类和对象
1、实验目的:
掌握类的定义,根据具体需求设计类;
进一步理解C++中类的封装性;
会根据类创建各种对象;
掌握对象的各种成员的使用方法。
2、实验内容
定义一个满足如下规定的Date类。
(1)用下面的格式输出日期:日/月/年;
(2)可运营在日前上加一天操作;
(3)设立日期。
参考代码:
#include 12、 13、Display()
{
cout < 14、if(Legal(y,m,d))
day=d, month=m, year=y;
}
bool Date::Legal(int y, int m, int d)
{
if(y>9999||y<1||d<1||m<1||m>12)
return false;
int dayLimit=31;
switch(m) case 4: case 6: case 9: case 11: dayLimit--;
if(m==2) dayLimit = IsLeapYear(y) ? 29 : 28;
return (d>dayLimit)? 15、 false : true;
}
bool Date::IsLeapYear(int y)
{
return !(y%4)&&(y%100)||!(y%400);
}
int main()
{
Date d;
d.SetDay(2023,2,28);
d.Display();
d.AddOneDay();
d.Display();
system("PAUSE");
}
运营结果:
实验3 继承与派生
1、实验目的:
理解继承的概念,学习如何使用基类成员,了解基类成员在派生类中的访问控制;
16、
理解类的派生对代码复用的作用。
2、实验内容:
设计一个人员类person和一个日期类date,由人员类派生出学生类Student和教师类professor,学生类和教师类的数据成员birthday为日期类。
参考代码:
#include 17、
}
void display()
{
cout< 18、 char namestr[50];
cout<<"Name:";
cin>>namestr;
name = new char[strlen(namestr)+1];
strcpy(name,namestr);
}
class student:public person
{
private:
int ID;
int score;
date birthday;
public:
student()
{
19、 cout<<"student ID:";
cin>>ID;
cout<<"student score:";
cin>>score;
}
void display()
{
cout<<"The basic information:"< 20、
cout< 21、 cout<<"The basic information:"< 22、nt stu;
stu.display();
professor prof;
prof.display();
system("PAUSE");
return 0;
}
运营结果:
实验4多态
1、实验目的:
掌握函数的概念及应用方法;
理解多态性的运用和作用。
2、实验内容:
新建一个基类shape类是一个表达形状的抽象类,area( )为求图形面积的函数。请从shape类派出矩形类(rectangle)、三角形类(triangle)、圆类(circles)、并给出具体的求面积函数。
参考代码:
#inclu 23、de 24、
y = b;
}
double area()
{
return x*y;
}
void display()
{
cout< 25、 public:
triangle(double a =1,double b =1,double c=1)
{
x = a;
y = b;
z= c;
}
double area()
{
double l = (x+y+z)/2;
return (sqrt((l-x)*(l-y)*(l-z)*l));
}
26、
void display()
{
cout< 27、uble area()
{
return 3.14*r*r;
}
void display()
{
cout<display();
p = new triangle(3,4,5);
p 28、>display();
p = new circles(2);
p->display();
system("PAUSE");
return 0;
}
运营结果:
实验5 运算符重载
1、实验目的:
掌握运算符重载的概念及使用方法,掌握特殊运算符的重载规定和方法。
2、实验内容:
定义整数集合类intSet,实现如下功能:
定义类的构造函数,并根据需要可以定义多个构造函数。
(1)Clear函数:清空整数集合
(2)IsEmpty():整数集合是否空集;
(3)IsMemberOf():判断某个整数是否在整数 29、集合内
(4)Operator+:增长一个整数到整数集合中
(5)Operator-:从整数集合中删除一个整数元素;
(6)Operator==:判断两个整数集合是否相等;
(7)Operator*:求两个整数结合的交集;
(8)Operator+:求两个整数集合的交集;
(9)Operator=:整数集合的对象之间的赋值;
(10)Operator<<:输出整数集合中的元素。
提醒:类intSet可以用数组的方式定义整数集合。例如:
int element[200]:保存整数集合数据;
int ElementNum: 指示整数集合的最后一个元素位置
注意:一个整数集合中 30、不允许有相同元素存在,二是集合中的元素没有顺序。
参考代码:
#include 31、t a);
bool operator==(intSet & set);
intSet operator+(intSet &set);
intSet operator *(intSet &set);
void operator = (intSet &set);
friend ostream &operator<<(ostream &,intSet&);
protected:
int element[100];
int ElementNum;
};
//初始化整数 32、集合元素
intSet::intSet()
{
for(int i = 0; i< 100; i++)
element[i] = 0;
ElementNum = -1;
}
intSet::intSet(int a[],int size)
{
if(size>=100)
ElementNum = 99;
else
ElementNum = size -1;
for(int i = 0;i<=ElementNum; i++)
element[i] = a[i];
for(int i =size; i<100;i++)
33、 element[i ] = 0;
}
//清空整数集合元素
void intSet::Clear()
{
for(int i = 0;i<100;i++)
{
element[i] = 0;
}
ElementNum = -1;
}
//判断整数集合是否为空
bool intSet::IsEmpty()
{
if(ElementNum == -1)
return false;
else
return true;
}
//判断元素是否在整数集合中
bool intSet::IsMemberOf(int a)
{
fo 34、r(int i= 0;i 35、 return true;
}
}
}
//从集合中删除一个元素
bool intSet::operator -(int a)
{
int pos;
if(!IsMemberOf(a))
return false;
for(int i = 0;i<=ElementNum;i++)
{
if(element[i]==a)
{
pos= i;
break;
}
}
for(int i = pos; i 36、];
ElementNum--;
return true;
}
//判断两个整数集合是否相等
bool intSet::operator ==(intSet & set)
{
bool Equal;
if(ElementNum!=set.ElementNum)
return false;
for(int i = 0;i<=ElementNum;i++)
{
Equal = false;
for(int j = 0;j 37、[i])
{
Equal = true;
break;
}
}
if(!Equal)
return false;
}
return true;
}
//求两个集合的交集
intSet intSet::operator +(intSet&set)
{
int a[100],size = 0;
for(int i = 0;i<=ElementNum;i++)
for(int j = 0;j<=set.ElementNum;j++)
{
if(element[i]==set.element[j 38、])
{
a[size] = element[i];
size++;
break;
}
}
return intSet(a,size);
}
//求两个集合的并集
intSet intSet::operator *(intSet &set)
{
int a[100],size;
for(int i = 0;i<=ElementNum;i++)
a[i] = element[i];
size = ElementNum +1;
for(int i= 0;i<=set.ElementNum;i++)
if(IsM 39、emberOf(set.element[i]))
continue;
else
{
if(size == 99)
break;
a[size] = set.element[i];
size++;
}
return intSet(a,size);
}
//整数集合对象间赋值
void intSet::operator =(intSet & set)
{
for(int i=0;i<=set.ElementNum;i++)
element[i] = set.element[i];
ElementNum = 40、set.ElementNum;
}
//输出整数集合中的元素
ostream & operator<<(ostream &os,intSet &s)
{
for(int i=0;i<=s.ElementNum;i++)
os<<"element["< 41、
cout< 42、class Student
{
private:
long No;
char *Name;
int Score;
public:
Student(long stu_no=0,char*stu_name=NULL,int stu_score=0);
long GetNo();
char *GetName();
int GetScore();
void ShowStudent();
};
Stude 43、nt::Student(long stu_no,char *stu_name,int stu_score)
{
No= stu_no;
Name = stu_name;
Score = stu_score;
}
void Student::ShowStudent()
{
cout< 44、
}
int Student::GetScore()
{
return Score;
}
int main()
{
Student stu[3]={Student(,"Li ming",70),
Student(,"Hu jun",80),
Student(,"Wang tian",90)};
int i,k,pos;
fstream infile,outfile;
outfile.open("Students.dat",ios::out|ios::binary 45、ios::trunc);
if(!outfile)
{
cerr<<"File open error!"< 46、n("Students.dat",ios::in|ios::binary);
for(i = 0;i<3;i++)
{
infile.read((char*)&stu[i],sizeof(Student));
cout< 47、y);
cout<<"please input the number of record:";
cin>>k;
pos = (k-1)*sizeof(Student);
infile.seekg(pos);
infile.read((char*)&stu[i],sizeof(Student));
cout< 48、ut<<"Delete the Second record!"< 49、
for(i=0;i<2;i++)
{
infile.read((char*)&stu[i],sizeof(Student));
cout< 50、中类模板的使用方法;
2、实验内容:
设计一个类模板template
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818