计重转换(期末模拟)

阅读: 评论:0

计重转换(期末模拟)

计重转换(期末模拟)

目录

题目描述

AC代码


题目描述

目前国际计重最基本的单位是克。在古代各个国家的计重单位是不同的。

中国使用斤、两、钱来表示重量,其中1斤=10两,1两=10钱

中国计重单位与克的关系为:1斤=500克,1两=50克,1钱=5克

英国使用磅、盎司、打兰来表示重量,其中1磅=16盎司,1盎司=16打兰

英国计重单位与克的关系为:1磅=512克,1盎司=32克,1打兰=2克

以下参考代码包含了抽象类Weight,中国计重和英国计重都继承了抽象类。

中国计重类新增了斤、两、钱三个属性,并新增了一个操作:计重转换Convert。

Convert能够把输入的克数转成中国计重,例如1234克转成2斤4两6钱4克,并且把数值放入斤、两、钱、克四个属性中

英国计重类新增了磅、盎司、打兰三个属性,并新增了两个操作:

1、计重转换Convert,功能与上述类似,例如2345克转成4磅9盎司4打兰1克,并且把数值放入对应的四个属性中

2、计重等价,重载类型转换运算符,实现将英国计重类的对象转换成中国计重类的对象,例如英国计重类对象en(2磅2盎司11打兰1克)等价于(转换成)中国计重类对象cn(2斤2两2钱1克)。

程序要求如下

1、参考代码框架不能做任何修改,在要求的地方添加代码

2、主函数不能有任何修改

以上数据纯粹为题目设计,方便计算,实际换算数据是不同的。

上述所有类属性都不是public,用面向对象思想和C++语言实现上述要求

----参考代码----

class CN; //提前声明

class EN; //提前声明

class Weight{ //抽象类

protected:

char kind[20]; //计重类型

int gram; //克

public:

Weight (char tk[]="no name", int tg=0)

{ strcpy(kind, tk);

gram = tg;

}

virtual void Print(ostream & out) = 0; //输出不同类型的计重信息

};

class CN: public Weight { //中国计重

//....类定义自行编写

};

class EN: public Weight { //英国计重

//....类定义自行编写

}

//以全局函数方式重载输出运算符,代码3-5行....自行编写

//重载函数包含两个参数:ostream流对象、Weight类对象,参数可以是对象或对象引用

//重载函数必须调用参数Weight对象的Print方法

int main()//主函数

{int tw;

//创建一个中国计重类对象cn

//构造参数对应斤、两、钱、克、类型,其中克和类型是对应基类属性gram和kind

CN cn(0,0,0,0, "中国计重");

cin>>tw;

cn.Convert(tw); //把输入的克数转成中国计重

cout<<cn;

//创建英国计重类对象en

//构造参数对应磅、盎司、打兰、克、类型,其中克和类型是对应基类属性gram和kind

EN en(0,0,0,0,"英国计重");

cin>>tw;

en.Convert(tw); //把输入的克数转成英国计重

cout<<en;

cn=en; //把英国计重转成中国计重

cout<<cn;

return 0;

}

输入

第一行输入一个克数,调用中国计重转换,把克数转成中国计重

第二行输入一个克数,调用英国计重转换,把克数转成英国计重,并调用计重等价把英国计重转成中国计重

输出

根据主函数运行输出

输入样例1 

1234
2345

输出样例1

中国计重:2斤4两6钱4克
英国计重:4磅9盎司4打兰1克
中国计重:4斤6两9钱0克

AC代码

#include<bits/stdc++.h>
using namespace std;
class CN; //提前声明class EN; //提前声明class Weight { //抽象类protected:char kind[20]; //计重类型int gram; //克public:Weight(char tk[] = "no name", int tg = 0){strcpy(kind, tk);gram = tg;}virtual void Print(ostream& out) = 0; //输出不同类型的计重信息};class CN : public Weight { //中国计重
protected:int jin, liang, qian;
public:CN(int jin,int liang,int qian,int g,char* p):jin(jin),liang(liang),qian(qian){gram=g;strcpy(kind,p);}void Convert(int g){jin = g / 500;liang = g % 500 / 50;qian =g % 50 / 5;gram = g % 5;}virtual void Print(ostream& out){out<<"中国计重:"<<jin<<"斤"<<liang<<"两"<<qian<<"钱"<<gram<<"克"<<endl;}
};class EN : public Weight { //英国计重
protected:int pound, ounce, dram;
public:EN(int pound,int ounce,int dram,int g,char* p):pound(pound),ounce(ounce),dram(dram){gram=g;strcpy(kind,p);}void Convert(int g){pound = g / 512;ounce = g % 512/ 32;dram = g % 512%32 / 2;gram = g % 2;}virtual void Print(ostream& out){out<<"英国计重:"<<pound<<"磅"<<ounce<<"盎司"<<dram<<"打兰"<<gram<<"克"<<endl;}operator CN(){int g=pound*512+ounce*32+dram*2+gram;CN temp(g/500,g%500/50,g%50/5,g%5,"中国计重");return temp;}
};//以全局函数方式重载输出运算符,代码3-5行....自行编写//重载函数包含两个参数:ostream流对象、Weight类对象,参数可以是对象或对象引用//重载函数必须调用参数Weight对象的Print方法
ostream& operator<<(ostream& out,Weight & weight)
{weight.Print(out);return out;
}int main()//主函数{int tw;//创建一个中国计重类对象cn//构造参数对应斤、两、钱、克、类型,其中克和类型是对应基类属性gram和kindCN cn(0, 0, 0, 0, "中国计重");cin >> tw;cn.Convert(tw); //把输入的克数转成中国计重cout << cn;//创建英国计重类对象en//构造参数对应磅、盎司、打兰、克、类型,其中克和类型是对应基类属性gram和kindEN en(0, 0, 0, 0, "英国计重");cin >> tw;en.Convert(tw); //把输入的克数转成英国计重cout << en;cn = en; //把英国计重转成中国计重cout << cn;return 0;}

本文发布于:2024-02-03 00:25:45,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170689114347446.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:期末
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23