标题:觉醒之后收获的疯狂喜悦
关键词:类的定义和使用
内容
A. 一句话概括今日目标完成情况
(a)掌握闹钟函数 100%)
(b)掌握分数运算函数 90%
B.具体内容
这是分数运算的完整版源代码。
#include<iostream>
#include<cmath>
using namespace std;
class Fraction
{
protected:
int a; //分子定义成保护成员
int b; //分母因为不能为0,因此定义为私有成员
int divisor(int p,int q); // 求最大公约数
public:
void set(int aa,int bb);
void show(); //显示分数
Fraction add(Fraction u); //加一个分数
};
void Fraction::set(int aa,int bb)
{
a=aa;
if(bb!=0){
b=bb;
}
else{
a=0;
b=1;
}
}
void Fraction::show()
{
cout<<a<<"/"<<b;
}
Fraction Fraction::add(Fraction u)
{
int tmp;
Fraction v;
v.a=a*u.b+b*u.a;
v.b=b*u.b;
tmp=divisor(v.a,v.b);
v.a=v.a/tmp;
v.b=v.b/tmp;
return v;
}
int Fraction::divisor(int p,int q)
{
int r;
if(p<q)
{
int tmp;
tmp=p;
p=q;
q=tmp;
}
r=p%q;
while(r!=0)
{
p=q;
q=r;
r=p%q;
}
return q;
}
class Real:public Fraction
{
public:
void show_real()
{
cout<<a<<'/'<<b<<'='<<a/(double)b<<endl;
}
};
int main()
{
Real f1,f2,f3;
int a,b,c,d;
cout<<"\n请分别输入两个分数的分子和分母。分母为0时退出\n";
cin>>a>>b;
cin>>c>>d;
f1.set(a,b);
f2.set(c,d);
f1.show_real();
f2.show_real();
cout<<endl;
Fraction f4;
f1.show();
cout<<"+";
f2.show();
f4=f1.add(f2);
cout<<"=";
f4.show();
cout<<endl;
return 0;
}
上午出错的原因就是没认真听老师讲。把int b放在了private语句下面。解决方法只要把private:删掉就可以,不过老师是在其之前加上//使之成为说明语句(效果相同)。
不过让我奇怪的是,什么是他口中的有限制的访问,具体这个“度”是开放到什么程度?还有他在class语句块中把protected部分中很多都放在类外定义的。我想知道原因是方便阅读,避免头重脚轻还是什么原因的。虽然知道这么一大串都定义在protected里面整个代码会看起来很丑,但还是觉得类外定义怪怪的。
再有就是听课的时候不要觉得这个老头一会一个Fraction啊一会一个divisor啊还动不动搞个什么带下划线的show_real出来感觉他很吊,但其实都是吓唬人的,你听他的英语口音就知道他英语差不多跟会长一个级别的了。下回再让我遇到这种看不懂的英文单词还死难打出来的我直接打阿猫阿狗了不一样一样的。
再有个困惑就是我在写球最大公约数的时候第一次不是这么写的,是这样:
Fraction f5;
f1.show();
cout<<"和"<<f2.show()<<"的最大公约数是";
f5=f5.divisor(f1,f2);
f5.show();
但是这样是错误的。原因是因为f2.show()必须要放在独立的一行上么?还是说我show里面已经有一个cout了,这里show外面就不能用cout了?
再仔细看看这样也是不对的。因为int Fraction::divisor(int p,int q)是个整型的。我总不能在int f1,int f2把。那么该如何调用divisor语句,尝试了很多种办法也没有成功。
好奇在Fraction::Fraction add里面就可以直接令tmp=divisor(v.a,v.b),在后面为什么就不行。已经试了半个小时了,花式填代码都是错的好伤心。不过他这个add语句还是很值得思索的,看了很久才搞清楚他是要通分,这个*看的真闹心。
觉得main函数里写了一长串差不多一样长的代码好丑啊……明天想个漂亮点的解决办法。
感冒快好了,整个人都感觉神清气爽了好多。
C.明日计划
(a)把分数函数的divisor插进去
(b)9.5的学习
我的博客:http://blog.csdn.net/andr3zzzz