//【任务2 拓展(选做)】将上面的输入运算符的编辑框换为下拉列表框,使之只能选“+‐*/”。
//头文件 cfrac1.h
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
public:
CFraction(int nu = 0, int de = 1) : nume(nu), deno(de){} //构造函数,初始化用
void output();
int getnume(){return nume;}
int getdeno(){return deno;}
CFraction operator+(CFraction &c1);
CFraction operator-(CFraction &c1);
CFraction operator*(CFraction &c1);
CFraction operator/(CFraction &c1);
};
//cfrac1.cpp文件
#include "stdafx.h"
#include "cfrac1.h"
using namespace std;
CFraction CFraction :: operator+(CFraction &c1)
{
CFraction c2;
c2.deno = deno * c1.deno;
c2.nume = nume * c1.deno + c1.nume * deno;
c2.output();
return c2;
}
CFraction CFraction :: operator-(CFraction &c1)
{
CFraction c2;
c2.deno = deno * c1.deno;
c2.nume = nume * c1.deno - c1.nume * deno;
c2.output();
return c2;
}
CFraction CFraction :: operator*(CFraction &c1)
{
CFraction c2;
c2.deno = deno * c1.deno;
c2.nume = nume * c1.nume;
c2.output();
return c2;
}
CFraction CFraction :: operator/(CFraction &c1)
{
CFraction c2;
c2.deno = deno * c1.nume;
c2.nume = nume * c1.deno;
c2.output();
return c2;
}
void CFraction :: output()
{
int i;
if(nume >= 0)
{
if(deno < nume)i = deno;
else i = nume;
for(; i > 0; --i)
{
if(nume % i == 0 && deno % i == 0)
{
nume = nume / i;
deno = deno / i;
break;
}
}
}
else
{
nume = -nume;
if(deno < nume)i = deno;
else i = nume;
for(; i > 0; --i)
{
if(nume % i == 0 && deno % i == 0)
{
nume = nume / i;
deno = deno / i;
break;
}
}
nume = -nume;
}
}
//button
void CCFraction1Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData();//将界面上的各控件输入的值“捕获”到与之关联的变量中
CFraction t1(m_nu1, m_de1);
CFraction t2(m_nu2, m_de2);
CFraction t3;
if (m_a=="+")
t3 = t1+t2;
else if (m_a == "-")
t3 = t1-t2;
else if (m_a=="*")
t3 = t1*t2;
else if (m_a=="/")
t3 = t1/t2;
m_nu3 = t3.getnume();
m_de3 = t3.getdeno();
UpdateData(FALSE);//用m_area的值更新界面上对应的控件的值并实现显示
}
上机感言:多谢贺老师帮我找出错误所在,因为画红圈地方的一个小小的空格使得整个程序运行结果不对,以后的加倍的仔细啊,