目录
实验五 类的继承与派生
第1关:简易商品系统
任务描述
答案代码
第2关:公司支出计算
任务描述
答案代码
第3关:棱柱体问题
任务描述
答案代码
实验五 类的继承与派生
第1关:简易商品系统
任务描述
答案代码
#include<iostream>
#include<string>
using namespace std;
/***********begin**********/
//此处完成各个类的书写,并实现题目输出
class Shirt {
private:
string place;
int price;
int num;
string mar;
public:
Shirt(string, int, int, string);
void InStorage(int i);
void OutStorage(int j);
void Calculate();
};
Shirt::Shirt(string a, int b, int c, string d)
{
place = a;
price = b;
num = c;
mar = d;
}
void Shirt::InStorage(int i)
{
num = num + i;
}
void Shirt::OutStorage(int j)
{
if (j > num)
{
cout << "Insufficient number!" << endl;
num = 0;
}
else {
num = num - j;
}
}
void Shirt::Calculate()
{
int m;
m = num * price;
cout << "total money=" << m << endl;
}
class Cap:public Shirt
{
public:
Cap(string, int, int, string, string);
private:
string shape;
};
Cap::Cap(string a, int b, int c, string d, string e):Shirt(a,b,c,d),shape(e){}
class Capboard:public Shirt
{
public:
Capboard(string, int, int, string, string);
private:
string color;
};
Capboard::Capboard(string a,int b,int c,string d,string f):Shirt(a,b,c,d),color(f){}
/**********end***********/
int main() {
Shirt s1("江西南昌", 235, 150, "纯棉");
Cap p1("四川成都", 88, 150, "尼龙", "平顶");
Capboard cup1("云南昆明", 3500, 10, "云松木", "原色");
int i, j, k, m;
cin >> i >> j >> k >> m;
s1.InStorage(i);
s1.OutStorage(j);
p1.OutStorage(k);
cup1.OutStorage(m);
s1.Calculate();
p1.Calculate();
cup1.Calculate();
}
第2关:公司支出计算
任务描述
答案代码
#include<iostream>
#include<stdlib.h>
#include<string>
using namespace std;
//请在此处完成YearWork,MonthWorker,WeekWoker及Company类的编码
/***********begin***********/
class Employee{
public:
virtual int earning()=0;
};
class YearWorker:public Employee{
int salary;
public:
YearWorker(int s)
{
salary=s;
}
virtual int earning()
{
return salary;
}
};
class MonthWorker:public Employee{
int salary;
public:
MonthWorker(int s)
{
salary=s;
}
virtual int earning()
{
return salary*12;
}
};
class WeekWorker:public Employee{
int salary;
public:
WeekWorker(int s)
{
salary=s;
}
virtual int earning()
{
return salary*52;
}
};
class Company{
public:
Employee *emp[30];
Company(){
for(int i=0;i<30;i++){
emp[i]=NULL;
}
}
int salarypay(){
int total=0;
for(int i=0;i<30;i++)
{
if(emp[i]!=NULL){
total+=emp[i]->earning();
}
}
return total;
}
};
/************end**********/
int main() {
Company co;
for (int i = 0; i < 30; i++)
{
int r = rand() % 3 + 1;
switch (r) {
case 1:
co.emp[i] = new WeekWorker(580);
break;
case 2:
co.emp[i] = new MonthWorker(2500);
break;
case 3:
co.emp[i] = new YearWorker(22000);
break;
default:
break;
}
}
cout << "company total pay=" << co.salarypay();
return 0;
}
第3关:棱柱体问题
任务描述
答案代码
#include <iostream>
using namespace std;
#include<string>
#include"time.h"
#include"math.h"
#define PI 3.14
/*********begin**********/
class Plane
{
public:
virtual double area() = 0;//求面积函数
};
class Rectangle :public virtual Plane
{
public:
double length, width;//长和宽
Rectangle(double l, double w) :length(l), width(w) {};
virtual double area()
{
return length * width;//覆盖求面积函数
}
};
class Square :public Rectangle{
public:
Square(double l) :Rectangle(l,l) {};//析造函数
};
class Circle :public virtual Plane
{
public:
double radius;//半径
Circle(double r) :radius(r) {};
virtual double area()
{
return 3.14 * radius * radius;
}
};
class Triangle :public virtual Plane
{
public:
double a, b, c;
Triangle(double a, double b, double c) :a(a), b(b), c(c) {};
virtual double area()
{
double p;
p = (a + b + c) / 2;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
};
class Body
{
public:
virtual double volume() = 0;//体积
virtual double superficialarea() = 0;//表面积
};
class Triangularprism :public Triangle,public Body
{
private:
double height;
public:
Triangularprism( int n,double h, double a, double b, double c) :Triangle(a, b, c), height(h) {};
virtual double volume()
{
return Triangle::area() * height;
}
virtual double superficialarea() {
return (Triangle::area() * 2 + Triangle::a * height + Triangle::b * height + Triangle::c * height);
}
};
class Circularcolumn :public Circle,public Body
{
private:
double height;
public:
Circularcolumn(int n, double h, double r) :Circle(r), height(h) {};
virtual double volume()
{
return Circle::area() * height;
}
virtual double superficialarea()
{
return (Circle::radius* 2*3.14*height + Circle::area() * 2 );
}
};
class Quadrangular :public Rectangle,public Body
{
private:
double height;
public:
Quadrangular(int n, double h, double l) :Rectangle(l,l), height(h) {};
virtual double volume()
{
return Rectangle::area() * height;
}
virtual double superficialarea()
{
return (Rectangle::area() * 2 + Rectangle::width * height * 2 + Rectangle::length * height*2);
}
};
/**********end********/
int main() {
int n;
double height,r,t1,t2,t3,l;
cin>>n>>height>>r;//输入n=0,表示圆柱体
Circularcolumn c1(n,height,r);
cin>>n>>height>>t1>>t2>>t3;//输入n=3,表示三棱柱
Triangularprism t(n,height,t1,t2,t3);
cin>>n>>height>>l;//输入n=4表示正四棱柱
Quadrangular qu(n,height,l);
Body *body[3];
body[0]=&c1;
body[1]=&t;
body[2]=&qu;
double superficalsum=0;
double volumesum=0;
for(int i=0;i<3;i++)
{
volumesum+=body[i]->volume();//volume()获取该体的体积
superficalsum+=body[i]->superficialarea();//获取该体的表面积
}
cout<<"all volume="<<volumesum<<endl;
cout<<"all superfilarea="<<superficalsum<<endl;
}