注册 登录
编程论坛 C++教室

这个代码问题出现在哪里? 总是出现提错?关于类的问题。

董世 发布于 2013-05-03 12:23, 635 次点击
要求就是要有一个ifraction子类,然后继承Fraction里的东西,还要有一个convertF来把假分数换算成带分数。
程序代码:
#include "iostream"
using namespace std;
class Fraction
{
protected:
int fenzi;
int fenmu;
double valud;
public :
Fraction(int m,int n)
{
Set(m,n);
}
Fraction(int k)
{
Set(k,1);
}
Fraction()
{
Set(0,1);
}
double GetValue()
{
return valud;
}
void GetFraction(int *Fenzi, int *Fenmu)
{
*Fenzi = fenzi;
*Fenmu=fenmu;
}
void Set(int Fenzi,int Fenmu)
{
fenzi=Fenzi;
fenmu=Fenmu;
if (Fenmu)
valud=Fenzi/Fenmu;
}
static Fraction Addition(Fraction m,Fraction n)
{
int a,b,c,d;
m.GetFraction(&a,&b);
n.GetFraction(&c,&d);
Fraction result;
if(b==d)
result.Set(a+c,b);
else
result.Set(a*d+b*c,b*d);
return result;
}
static Fraction Subtraction(Fraction m,Fraction n)
{
int a,b,c,d;
m.GetFraction(&a,&b);
n.GetFraction(&c,&d);
Fraction result;
if(b==d)
result.Set(a-c,b);
else
result.Set(a*d-b*c,b*d);
return result;
}
static Fraction Multiplication(Fraction m,Fraction n)
{
int a,b,c,d;
m.GetFraction(&a,&b);
n.GetFraction(&c,&d);
Fraction result;
result.Set(a*c,b*d);
return result;
}
static Fraction Division(Fraction m,Fraction n)
{
int a,b,c,d;
m.GetFraction(&a,&b);
n.GetFraction(&c,&d);
Fraction result;
result.Set(a*d+b*c,b*d);
return result;
}
};
class iFraction:public Fraction
{
int number;
public:
iFraction()
{
number=0;fenzi=0;fenmu=1;
}
iFraction(int Fenzi,int Fenmu,int Number)
{
fenzi=Fenzi;
fenmu=Fenmu;
number=Number;
}
int GetNumber()
{
return number;
}
void SetNumer(int n)
{
number=n;
}
void Show()
{
if (number)
cout<<number<<"#<"<<fenzi<<'/'<<fenmu<<'>'<<endl;
else
cout<<"<"<<fenzi<<'/'<<fenmu<<'>'<<endl;
}
};
iFraction convertF(Fraction f)
{
int a,b;
f.GetFraction(&a,&b);
iFraction i;
i.SetNumer(a/b);
i.Set(a-i.GetNumber()*b,b);
return i;
}
int main()
{
Fraction test1(11,3);
Fraction test2(6,3);
iFraction test3;
test3=convertF(Fraction::Addition(test1,test2));
test3.Show();
}
9 回复
#2
董世2013-05-03 12:58
求大神指点下,怎么没人回复我啊
#3
笑傲2013-05-03 13:57
太长了,你说一下哪错了吧,没耐心看下去
#4
天使梦魔2013-05-03 16:45
5#<2/3>
这是输出结果?
如果是编译有问题注意一下你编译器的标准,随便把你代码标准弄一下
比如编译器提供的头文件用<>符号
#5
董世2013-05-03 20:32
回复 4楼 天使梦魔
对,我编译的就是这个结果,不知道为什么
#6
董世2013-05-03 20:57
回复 3楼 笑傲
我编译之后老师运行出现乱码
#7
董世2013-05-03 20:59
程序代码:
#include "iostream"
using namespace std;
class Fraction
{
protected://保护成员,使得iFraction可以从Fraction继承
int fenzi;//分子
int fenmu;//分母
double valud;//计算的结果
public :
Fraction(int m,int n)//构造函数
{
Set(m,n);
}
Fraction(int k)
{
Set(k,1);
}
Fraction()
{
Set(0,1);
}
double GetValue()//获得分式的value
{
return valud;
}
void GetFraction(int *Fenzi, int *Fenmu)//间接获得分子,分母的值
{
*Fenzi = fenzi;
*Fenmu=fenmu;
}
void Set(int Fenzi,int Fenmu)//设置分子分母的值
{
fenzi=Fenzi;
fenmu=Fenmu;
if (Fenmu)//如果分母不为0,计算value的值
valud=Fenzi/Fenmu;
}
static Fraction Addition(Fraction m,Fraction n)//静态成员函数,加法
{
int a,b,c,d;
m.GetFraction(&a,&b);
n.GetFraction(&c,&d);
Fraction result;
if(b==d)
result.Set(a+c,b);
else
result.Set(a*d+b*c,b*d);
return result;
}
static Fraction Subtraction(Fraction m,Fraction n)//静态成员函数,减法
{
int a,b,c,d;
m.GetFraction(&a,&b);
n.GetFraction(&c,&d);
Fraction result;
if(b==d)
result.Set(a-c,b);
else
result.Set(a*d-b*c,b*d);
return result;
}
static Fraction Multiplication(Fraction m,Fraction n)//静态成员函数,乘法
{
int a,b,c,d;
m.GetFraction(&a,&b);
n.GetFraction(&c,&d);
Fraction result;
result.Set(a*c,b*d);
return result;
}
static Fraction Division(Fraction m,Fraction n)//静态成员函数,除法
{
int a,b,c,d;
m.GetFraction(&a,&b);
n.GetFraction(&c,&d);
Fraction result;
result.Set(a*d+b*c,b*d);
return result;
}
};
class iFraction:public Fraction//从Fraction类公有的方式继承
{
int number;//私有成员,整数部分
public:
iFraction()//iFraction的构造函数
{
number=0;fenzi=0;fenmu=1;
}
iFraction(int Fenzi,int Fenmu,int Number)/构造函数
{
fenzi=Fenzi;
fenmu=Fenmu;
number=Number;
}
int GetNumber()
{
return number;
}
void SetNumer(int n)//设置带分数的整数部
{
number=n;
}
void Show()//带分数的显示
{
if (number)
cout<<number<<"#<"<<fenzi<<'/'<<fenmu<<'>'<<endl;
else
cout<<"<"<<fenzi<<'/'<<fenmu<<'>'<<endl;
}
};
iFraction convertF(Fraction f)//外部函数,讲Fraction转换为Fraction
{
int a,b;
f.GetFraction(&a,&b);
iFraction i;
i.SetNumer(a/b);
i.Set(a-i.GetNumber()*b,b);
return i;
}
int main()//主函数,用来测试
{
Fraction test1(11,3);
Fraction test2(6,3);
iFraction test3;
test3=convertF(Fraction::Addition(test1,test2));
test3.Show();
}



这个是一个程序用到分类,可以输入两个数分子和分母,能把假分数换为带分数,还能让两个分数加减乘除
#8
董世2013-05-03 20:59
能不能有个大神出来下指出我哪里错了??
#9
邓士林2013-05-03 22:35
编译也没问题啊!你能不能把问题说的明白点
#10
董世2013-05-03 22:39
回复 9楼 邓士林
编译是没问题,但是不能运行啊,运行后出现结果是5#(3/2) 没有任何操作
1