类与对象 实验五 期末回顾
原创
©著作权归作者所有:来自51CTO博客作者mb5f5b1df7f1e34的原创作品,请联系作者获取转载授权,否则将追究法律责任
实验目录:
第一题
1、教材P242程序设计的第1题
定义一个Book(图书)类,在该类定义中包括以下数据成员和成员函数。
数据成员:bookname(书名)、price(价格)和number(存书数量)。
成员函数:display()显示图书的情况;borrow()将存书数量减1,并显示当前存书数量;restore()将存书数量加1,并显示当前存书数量。
在main函数中,要求创建某一种图书对象,并对该图书进行简单的显示、借阅和归还管理。
●
#include<bits/stdc++.h>
using namespace std;
class Book
{
string name;
int price,num;
public:
Book(string i,int j,int k)
{
name=i;
price=j;
num=k;
}
int borrow()
{
num--;
cout<<"当前存书数量:"<<num<<endl;
}
int restore()
{
num++;
cout<<"当前存书数量:"<<num<<endl;
}
friend ostream&operator <<(ostream &out,Book &b)
{
out<<"书名:"<<b.name<<"价格:"<<b.price<<"数目:"<<b.num<<endl;
return out;
}
};
int main()
{
Book b("c++",50,10);
cout<<b;
cout << "请输入借阅或归还标志(b/r),n退出程序:";
char flag;
while(cin >> flag)
{
switch (flag)
{
case 'b': b.borrow(); break;
case 'r': b.restore();break;
case 'n': break;
}
if(flag=='n')break;
}
return 0;
}
第二题
3、创建一个函数f1(),返回其参数的平方根。重载f1()三次,让它返回整数、长整数与双精度的平方根(计算平方根可以使用标准库函数sqrt())
#include<iostream>
#include<cmath>
using namespace std;
double f1(int x)
{return sqrt(x);}
double f1(long x)
{return sqrt(x);}
double f1(double x)
{return sqrt(x);}
int main()
{int a;
long b;
double c;
cout<<"please input integer,long integer and double:";
cin>>a>>b>>c;
cout<<"result:";
cout<<f1(a)<<" "<<f1(b)<<" "<<f1(c)<<endl;
}
第三题
4、建立一个Student类,含有私有的学号(字符型)、姓名(字符型)、年龄(整型)数据成员。用new自动为Student的对象分配内存,并将学号“0504020101”,姓名“张三”,年龄20存入内存的相应域中,把该生的信息显示出来。提示:用new创建对象并调用的是有参构造函数的格式为:类名 *指针变量=new 类名(实参1,实参2,…);(根据自己掌握的情况,需要的话可借助课件复习此知识点)
自己的代码:
#include<bits/stdc++.h>
using namespace std;
class Student
{
string id,name;
int age;
public:
Student(string i,string j,int k)
{
id=i;
name=j;
age=k;
}
friend ostream&operator <<(ostream &out,Student &s)
{
out<<"学号 姓名 年龄" <<endl;
out<<s.id<<" "<<s.name<<" "<<s.age<<endl;
}
};
int main()
{
Student *s=new Student("2017","sdz",18);
cout<<(*s)<<endl;
delete s;
return 0;
}
老师的代码的有知识点:
#include<iostream>
#include<cstring>
using namespace std;
class Student{
char *num; //本程序为了让大家再熟悉一下在构造函数用new申请空间等的相关操作,这里定义num为字符指针类型,其实也可定义成字符数组或string类型
char *name;//同上
int age;
public:
Student(char *s,char *n,int a);
void put();
~Student();
};
Student::Student(char *s,char *n,int a)
{
num=new char[strlen(s)+1];
strcpy(num,s);
name=new char[strlen(n)+1];
strcpy(name,n);
age=a;
}
void Student::put()
{
cout<<"num:"<<num<<endl<<"name:"<<name<<endl<<"age:"<<age<<endl;
}
Student::~Student()
{if(!num)
delete []num;
if(!name)
delete []name;
}
int main()
{ Student *p=new Student("0504020101","zhangsan",20);
p->put();
delete p;
return 0;
}
第四题
5、定义学生类,属性包括:学生姓名、语文成绩、数学成绩。完成:置学生信息、输出学生信息、求每个学生的平均成绩、求每个学生的总分、输出每个学生的平均成绩和总分。(要求用对象数组、构造函数完成)提示:考虑学生人数不定的情况,可用new建立动态对象数组(用new创建动态对象数组同用new创建其它数据类型的动态数组的操作相同)。
#include<bits/stdc++.h>
using namespace std;
class Student
{
string name;
double c,m;
public:
friend ostream&operator <<(ostream &out,Student &s)
{
out<<"输出学生姓名、语文成绩、数学成绩" <<endl;
out<<s.name<<" "<<s.c<<" "<<s.m<<endl;
return out;
}
friend istream&operator >>(istream &in,Student &s)
{
cout<<"输入学生姓名、语文成绩、数学成绩" <<endl;
in>>s.name>>s.c>>s.m;
return in;
}
void out()
{
double sum,ave;
sum=c+m;
ave=sum/2;
cout<<"总分"<<sum<<endl;
cout<<"平均成绩"<<ave<<endl;
}
};
int main()
{
int n;
cout<<"输入学生人数" <<endl;
cin>>n;
Student *s=new Student[n];
for(int i=0;i<n;i++)
{
cin>>s[i];
}
for(int i=0;i<n;i++)
{
cout<<i+1<<"个学生"<<endl;
s[i].out();
}
delete []s ;
return 0;
}
第四题
设计一个学校在册人员类,数据成员包括身份证号(
id
,可定义成字符串类型)、姓名(
name
)、性别(
sex
)、生日(
birth
,可定义成结构体类型)和家庭住址(
homeadd
)。成员函数包括人员信息的录入和显示,还包括构造函数和拷贝构造函数。在主函数中进行测试
。
#include<bits/stdc++.h>
using namespace std;
struct Birth
{
int y,d,m;
};
class Student
{
string name,sex,id,h;
Birth b;
public:
Student(string i,string j,string k,int a,int d,int c,string t)
{
name=j;sex=k;id=i;h=t ;
b.y=a;
b.m=d;
b.d=c;
}
friend ostream&operator <<(ostream &out,Student &s)
{
cout<<"身份证号、姓名、性别 、生日(年月日)和家庭住址"<<endl;
out<<s.id<<" "<<s.name<<" "<<s.sex<<" "<<s.b.y <<" "<<s.b.m<<" "<<s.b.d<<" "<<s.h;
return out;
}
Student(Student &a)
{
name=a.name;sex=a.sex;id=a.id;h=a.h ;
b.y=a.b.y;
b.m=a.b.m;
b.d=a.b.d;
}
};
int main()
{
Student s("1","sdz","nan",1998,12,8,"江苏") ;
cout<<s<<endl;
Student s1(s);
cout<<s1;
return 0;
}
第五题
设计包含静态数据成员的类
某商店经销一种货物,货物成箱进,成箱卖出,购进和卖出都是以重量为单位(每箱的重量不同),商店需要记录下存货的总重量。
分析:
定义一个货物类,类中包含
私有成员 weight
一个静态数据成员total_weight;
在构造函数中,修改total_weight的值
在析构函数中,修改total_weight的值
在主函数中进行测试
#include<bits/stdc++.h>
using namespace std;
class Goods
{
double w;
static double totw;
public:
Goods(double i=0)
{
w=i;
totw+=w;
}
~Goods()
{
totw-=w;
}
void display()
{
cout<<"当前货物总重量:"<<totw<<endl;
}
};
double Goods::totw=0;
int main()
{
Goods *p,*q;
p=new Goods(10);
p->display();
q=new Goods(20);
q->display();
delete p;
q->display();
delete q;
return 0;
}