⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fractexop.cpp

📁 做为SD0609的一员,我扎实的基础是如何打出来的,来看看我那时连猴子选大王都不会的人,是如何成长起来的吧!主要包括我所做的C++,JAVA基础联系.乱是乱了点,不过如果真心想学习,打好基础,看看也不
💻 CPP
字号:
/****************************************
* 代分数演示程序(继承、多态、运算符重载)
* 达内,陈宗权,2006/8
****************************************/
#include <iostream>
using namespace std;
//定义分数类(基类)
class Fract{
    int n;//分子
    int d;//分母
public:
    Fract( int x=0, int y=1 );//构造函数
    virtual int getn()const{return n;}
    void setn( int x ){n=x;}
    int getd()const{return d;}
    void setd( int y ){d=(y==0?1:y);}
    friend ostream& operator<<( ostream& os, const Fract& cf );//输出
    friend istream& operator>>( istream& is, Fract& f );//输入
    void adjust();//约分
    virtual Fract operator+( const Fract& f )const;//相加
};
ostream& operator<<( ostream& os, const Fract& cf )
{
    os << cf.n;
    if( cf.n!=0 && cf.d!=1 )
        os << '/' << cf.d;
    return os;
}
istream& operator>>( istream& is, Fract& f )
{
    char ch;//用来保存‘/’字符
    is >> f.n >> ch >> f.d;
    return is;
}
Fract::Fract( int x, int y )
{
    setn( x );
    setd( y );
    adjust();
}
void Fract::adjust()
{
    if( d<0 )
    {
        n = -n;
        d = -d;
    }
    int an = (n<0?-n:n);
    for( int i=an; i>1; i-- )
    {
        if( an%i==0 && d%i==0 )
        {
            n /= i;
            d /= i;
            break;
        }
    }
}
Fract Fract::operator+( const Fract& f )const
{
    int x = n*f.d+d*f.n;
    int y = d*f.d;
    Fract result( x, y );
    return result;
}
//代分数类,继承分数类
class FractEx : public Fract{
    int i;//整数部分
public:
    FractEx( int z=0, int x=0, int y=1 );//构造函数
    FractEx( const Fract& f );//用分数来构造一个代分数
    void seti( int z ){i=z;}//设置整数部分
    int geti()const{return i;}//取得整数部分
    int getn()const{return i*getd()+Fract::getn();}//取得分子
    friend ostream& operator<<( ostream& os, const FractEx& cf );//输出
    friend istream& operator>>( istream& is, FractEx& f );//输入
    Fract operator+( const Fract& f )const;//加上一个分数
};
ostream& operator<<( ostream& os, const FractEx& cf )
{
    os << cf.i;
    if( cf.Fract::getn()!=0 )
        os << ')' << cf.Fract::getn() << '/' << cf.getd();
    return os;
}
istream& operator>>( istream& is, FractEx& f )
{
    char ch;//用来保存')'和'/'字符
    is >> f.i >> ch >> (Fract&)f;
    return is;
}
FractEx::FractEx( int z, int x, int y )
:Fract(x,y), i(z)
{}
FractEx::FractEx( const Fract& f )
{
    i = ( f.getn()/f.getd() );
    setn( f.getn()%f.getd() );
    setd( f.getd() );
}
Fract FractEx::operator+( const Fract& f )const
{
    int x = getn()*f.getd()+getd()*f.getn();
    int y = getd()*f.getd();
    return Fract(x,y);
}
int main()
{
    FractEx f1( 3, 2, 6 ), f2( 1, 4, 24 ), f3;
    Fract f(7,6);
    cout << "f1=" << f1 << endl;
    cout << "f2=" << f2 << endl;
    f3 = f1+f2;//两个代分数相加
    cout << f1+f2 << endl;;//输出结果,分数
    cout << f3 << endl;//输出结果,代分数
    Fract* p = &f1;//基类指针
    f3 = *p + f2;//利用多态实现
    cout << *p + f2 << endl;
    cout << f3 << endl;
    cout << f1 + f << endl;
    f3 = f1 + f;
    cout << f3 << endl;
    cout << "input a extend-fraction[format:i)n/d]:";
    cin >> f1;
    cout << "input a fraction[format:n/d]:";
    cin >> f;
    f3 = f1 + f;
    cout << f1 << '+' << f << '=' << f3 << endl;
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -