面向对象程序设计复习(二)运算符重载

金属加工

题目描述

在金属加工中,金属具有硬度、重量、体积的属性(都是整数),包括四种操作:
1、合并,每两块金属可以合并成一块新的金属。新金属的重量等于原两块金属的重量之和,体积和硬度也类似计算。
2、巨化,金属通过熔炼风吹的方法会巨化,体积变大n倍,重量和硬度不变
3、硬化,在金属中加入高分子材料可以硬化金属,每提升硬度一级,重量和体积都增加10%。
4、软化,在金属中加入特殊化学溶液可以降低金属硬度,每降低硬度一级,重量和体积都减少10%
用类来描述金属,用运算符重载方式实现金属的四种操作,并定义打印函数,具体要求如下
1、用加法运算符、友元的方式实现合并
2、用乘法运算符、友元的方式实现巨化,含两个参数:金属对象、巨化倍数
3、用++运算符、成员函数、前增量的方式实现硬化
4、用–运算符、成员函数、后增量的方式实现软化
5、打印函数用来输出金属的信息,输出格式看参考样本

操作中所有属性的运算结果都只保留整数部分。

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

输入

第一行输入第一块金属的信息,包括硬度、重量、体积

第二行输入第二块金属的信息,包括硬度、重量、体积

第三行输入一个参数n,表示巨化n倍

输出

第一行输出两块金属合并后的信息

第二行输出第一块金属巨化n倍的信息

第三行输出第一块金属提升硬度一级后的信息

第四行输出第二块金属降低硬度一级后的信息

样例输入

3 3000 300
5 5000 500
2

样例输出

硬度8–重量8000–体积800
硬度3–重量3000–体积600
硬度4–重量3300–体积330
硬度4–重量4500–体积450

运算符重载又出现了一点问题(等会重新梳理下各种重载规则以及前增后增

#include<bits/stdc++.h> 
#include<algorithm>
using namespace std;

class Mental{
	protected: 
		int h,w,v;
	public:
		Mental(){
		}
		Mental(int hh, int ww, int vv):h(hh),w(ww),v(vv){} 
		Mental(Mental &a)
		{
			h = a.h;
			w = a.w;
			v = a.v;
		}
		Mental operator++(int)
		{
			h++;
			w += w*0.1;
			v += v*0.1;
			return *this;
		}
		Mental operator--(int)
		{
			h--;
			Mental b(*this);
			w -= w*0.1;
			v -= v*0.1;
			return b;
		}
		friend Mental operator+(Mental &a, Mental &b);
		friend Mental operator*(Mental &a, int x);
		~Mental(){}
		void print()
		{
			cout << "硬度" << h << "--重量" << w << "--体积" << v << "\n"; 
		}
}; 

Mental operator+(Mental &a, Mental &b)
{
	Mental c;
	c.h = a.h + b.h;
	c.w = a.w + b.w;
	c.v = a.v + b.v; 
	return c;
}

Mental operator*(Mental &a, int x)
{
	Mental b;
	b.h = a.h;
	b.w = a.w;
	b.v = a.v*x; 
	return b;
}


int main()
{
	int h1,h2,w1,w2,v1,v2,n;
	cin >> h1 >> w1 >> v1;
	cin >> h2 >> w2 >> v2;
	cin >> n;
	Mental a(h1,w1,v1);
	Mental b(h2,w2,v2);
	(a+b).print();
	(a*n).print();
	a++;
	a.print();
	b--;
	b.print();
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值