头歌实验--面向对象程序设计

目录

[实验五 类的继承与派生](#实验五 类的继承与派生)

第1关:简易商品系统

任务描述

答案代码

第2关:公司支出计算

任务描述

答案代码

第3关:棱柱体问题

任务描述

答案代码


实验五 类的继承与派生

第1关:简易商品系统

任务描述

答案代码

cpp 复制代码
#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关:公司支出计算

任务描述

答案代码

cpp 复制代码
#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关:棱柱体问题

任务描述

答案代码

cpp 复制代码
#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;
}
相关推荐
令狐掌门13 分钟前
C++中间件DDS介绍
c++·中间件·c++ dds
非 白1 小时前
数据结构——树
数据结构·笔记·考研
Dizzy.5173 小时前
数据结构(查找)
数据结构·学习·算法
专注VB编程开发20年6 小时前
除了 EasyXLS,加载和显示.xlsx 格式的excel表格,并支持单元格背景色、边框线颜色和粗细等格式化特性
c++·windows·excel·mfc·xlsx
分别努力读书6 小时前
acm培训 part 7
算法·图论
武乐乐~6 小时前
欢乐力扣:赎金信
算法·leetcode·职场和发展
Jared_devin6 小时前
数据结构——模拟栈例题B3619
数据结构
'Debug6 小时前
算法从0到100之【专题一】- 双指针第一练(数组划分、数组分块)
算法
sushang~7 小时前
leetcode21.合并两个有序链表
数据结构·链表
Fansv5877 小时前
深度学习-2.机械学习基础
人工智能·经验分享·python·深度学习·算法·机器学习