小甲鱼c++学习视频之运算符重载

一、学习要点:
1.将分数定义为一个类,简化处理过程,面向对象的思维,不仅有数据,还可以对一个分数进行操作,比如约分操作,加减乘除操作.
2.类的私有成员只能通过成员函数进行访问.
3.分数的约分过程是分子和分母同时除以分子和分母的最大公约数.求两个数的最大公约数用的是欧几里得辗转相除的原理.
二、实现代码

#include<iostream>
#include<math.h>
#include<stdlib.h>
using namespace std;
class Rational{
public:
    Rational(int num,int denomi);//构造器
    Rational operator+(Rational x);//运算符重载函数
    Rational operator-(Rational x);
    Rational operator*(Rational x);
    Rational operator/(Rational x);
    void print();
private:
    int numerator;
    int denominator;
    void normalize();//归一化处理,比如将2/16变成1/8;
};
Rational::Rational(int num,int denomi){
    numerator=num;
    denominator=denomi;
    normalize();
}
void Rational::normalize(){
    if(denominator<0)//负号放在分母上
    {
        numerator=-numerator;
        denominator=-denominator;
    }
    //欧几里得算法
    int t;
    int a=abs(numerator);
    int b=abs(denominator);
    if(a>b){
        t=a%b;
        while(t){
            a=b;
            b=t;
            t=a%b;
        }
        a=b;
    }
    else{
        t=b%a;
        while(t){
        b=a;
        a=t;
        t=b%a;
        }
    }
    numerator/=a;
    denominator/=a;
    }
Rational Rational::operator+(Rational x){
    int a=numerator;
    int b=denominator;
    int c=x.numerator;
    int d=x.denominator;
    int e=a*d+b*c;
    int f=b*d;
    return Rational(e,f);
}
Rational Rational::operator-(Rational x){
    int a=numerator;
    int b=denominator;
    int c=x.numerator;
    int d=x.denominator;
    int e=a*d-b*c;
    int f=b*d;
    return Rational(e,f);
}
Rational Rational::operator*(Rational x){
    int a=numerator;
    int b=denominator;
    int c=x.numerator;
    int d=x.denominator;
    int e=a*c;
    int f=b*d;
    return Rational(e,f);
}
Rational Rational::operator/(Rational x){
    int a=numerator;
    int b=denominator;
    int c=x.numerator;
    int d=x.denominator;
    int e=a*d;
    int f=b*c;
    return Rational(e,f);
}
void Rational::print(){
    if(numerator%denominator==0){
        cout<<numerator/denominator;
    }else{
        cout<<numerator<<'/'<<denominator;
    }
}
int main()
{
    Rational f1(2,16);
    Rational f2(7,8);
    //加的过程
    Rational resadd=f1+f2;
    f1.print();
    cout<<'+';
    f2.print();
    cout<<'=';
    resadd.print();
    cout<<'\n';
    //减的过程
    Rational ressub=f1-f2;
    f1.print();
    cout<<'-';
    f2.print();
    cout<<'=';
    ressub.print();
    cout<<'\n';
    //乘的过程
    Rational resmul=f1*f2;
    f1.print();
    cout<<'*';
    f2.print();
    cout<<'=';
    resmul.print();
    cout<<'\n';
    //除的过程
    Rational resc=f1/f2;
    f1.print();
    cout<<'/';
    f2.print();
    cout<<'=';
    resc.print();
    cout<<'\n';
    system("pause");
    return 0;
}

三、运行结果图如下:
这里写图片描述
四、如有错误,请指教,相互交流学习。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《深入浅出 C++视频教程详细、系统地介绍了 C++中方方面面的技术细节,整个课程涵盖知识点非常多,知识模块囊括 名字空间、类与对象、继承与多态、各类友元、异常机制、函数模板、类模板、STL容器操作等等,完之后将拥有C++的非常坚实的功底。 注意:本套视频教程来源于线下的实体班级,因此视频中有少量场景对话和生问答,对此比较介意的亲们谨慎购买。 本套视频教程不仅会讲清楚概念和相应知识点,而且会抽丝剥茧,讲清楚来龙去脉,站在编程语言设计者的角度讲清楚为什么会出现这样的语法,站得高才能看得远,而不仅仅纠缠于细碎的语法。既有登高望远的视角,又有俯身前行的实践,有别于市面上大多数流于表面的教程。下面是讲解迭代器的一节视频的截图: 每个知识点不仅仅会通过视频讲解清楚,并且会配以精心安排的实验和作业,用来保证学习过程中切实掌握核心技术和概念,通过实验来巩固,通过实验来检验,实验与作业的目的是现问题,现技术盲点,通过答疑和沟通夯实技术技能。注意:本套视频教程包含全套11套作业题,覆盖所有视频知识点,循序渐进,各个击破。下面是部分作业题目展示,每道题都有知识点说明,是检验学习效果的一大利器:常见问题:问:零基础可以学习吗?答:这门课程并非针对完全零基础的员,学习这门课程需要对C语言有了一定了解的。问:遇到问题可以答疑吗?答:可以的,购买课程后可以联系到我,安排进入专门的QQ答疑群。不仅可以向老师提问,也可以跟其他同讨论,结交兴趣相投的朋友。问:完能做什么?答:C++是众多开岗位的必备技能,也是进入面向对象编程领域的一门利器,可以胜任很多岗位的职业要求。尤其是对游戏开、游戏引擎、算法、界面开、系统开等等,C++都是热门技术。
C++写的实现了基本的功能 #include<iostream> #include"PolyList.h" using namespace std; Polynomial::Polynomial() { coefs = NULL; exps = NULL; size = 0; cout<<"构造完成"<<endl; } Polynomial::~Polynomial() { delete []coefs; delete []exps; coefx = NULL; expx= NULL; cout<<"析构调用"<<endl; } Polynomial::Polynomial(double coef[],int exp[],int s) { coefs = new double[s]; exps = new int[s]; size = s; for(int i = 0; i<size; i++) coefs[i] = coef[i]; for(i = 0;i<size;i++) exps[i] = exp[i]; cout<<"complete!"<<endl; } Polynomial::Polynomial(const Polynomial &p) { coefs = new double[p.size]; exps = new int[p.size]; size = p.size; for(int i = 0;i < size; i++) coefs[i]= p.coefs; for(i = 0; i < size; i++) exps[i] = p.exps[i]; cout<<"copy调用"<<endl; } const Polynomial& Polynomial::operator=(const Polynomial &p)//完成测试 { if(this!=&p) { delete []coefs; delete []exps; size = p.size; coefs = new double[size]; exps = new int[size]; for(int i = 0;i < size;i++) coefs[i] = p.coefs[i]; for(int i = 0; i<size;i++) exps[i]=p.exps[i]; } return *this; }//完成测试 int Polynomial::degree() const //完成测试 { return size - 1; } double Polynomial::evaluate(double x) const//完成测试 { double sum=coefs[0]; for(int i = 1;i < size;i ++) { for(int j = 1;j <= i;j++) x*= x; sum+=coefs[i] * x; } return sum; } bool Polynomial::operator ==(const Polynomial &p) const { if (size != p.size) return false; return false; for(int i = 0; i < size; i++) if(coefs[i]!= p.coefs[i]) return false; return true; } bool Polynomial::operator !=(const Polynomial &p) const { return !(operator==(p)); } Polynomial Polynomial::operator +(const Polynomial &p) const { int maxsize = (size > p.size) ? size:p.size; int minsize = (size < p.size) ? size:p.size; Polynomial temp; temp.coefs = new double[maxsize]; temp.exps = new int [maxsize]; for(int i = 0;i < minsize;i ++) temp.coefs[i]=coefs[i] + p.coefs[i] for(;i < maxsize;i++) temp.coefs[i]=coefs[i]; for(int j = 0;j < maxsize;j++) temp.exps[j] = j; temp.size=maxsize; return temp; } Polynomial Polynomial::operator -(const Polynomial &p) const { int maxsize = (size > p.size) ? size:p.size; int minsize = (size < p.size) ? size:p.size; Polynomial temp; temp.coefs = new double[maxsize]; temp.exps = new int[maxsize]; for(int i = 0;i < minsize;i++) temp.coefs[i]=coefs[i] - p.coefs[i]; for(;i <maxsize;i++) temp.coefs[i]=

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值