C++编程实例——实现简单的时间加减运算

C++是面向对象的程序语言,区别我们的C语言,具体编程首先要定义一个类,类中包含私有成员以及公有成员两部分,私有成员主要是变量,公有成员主要是方法,另外还需要另外的.cpp程序来实现这些公有方法,以及一个主函数。一般的,外部对私有成员是不能直接访问的,需要通过调用公有方法来实现访问私有成员。

本程序用来实现对时间的加减,例如2小时40分钟加上5小时55分钟,最后输出结果:8小时35分钟。
该程序中主要涉及引用以及方法重载

一、mitime.h

#ifndef MYTIME0_H_
#define MYTIME0_H_

class Time         //定义Time类
{
    private:             //私有成员
        int hours;
        int minutes;

    public:                    //公有成员(一般是方法)
        Time();                //无参构造函数(默认构造函数)
        Time (int h,int m=0);  //带参构造函数  
        void AddMin(int m);     
        void AddHr(int h);
        void Reset (int h=0,int m=0);  
        Time Sum(const Time & t) const;   //参数为一个引用
        void Show() const;
};
#endif

1、构造函数:

构造函数主要用于初始化数据成员,大致分为:无参数构造函数,一般构造函数(重载构造函数),复制构造函数。
参考:http://www.cnblogs.com/xkfz007/archive/2012/05/11/2496447.html

2、引用:

  • 引用概念:

    引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。

  • 引用实例:

int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名

二、mytime.cpp

该程序主要用来对类的公有成员(方法)进行具体实现。
::表示作用域解析运算符,指定方法所属域,提高可读性。如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上“::”

#include <iostream>
#include "mytime.h"

Time::Time()          //默认构造函数用于数据成员初始化
{
   hours=minutes=0;
}

Time::Time(int h,int m)  //重载构造函数
{
   hours=h;
   minutes=m;
}

void Time::AddMin(int m)
{
   minutes +=m;
   hours +=minutes/60;
   minutes %=60;
}

void Time::AddHr(int h)
{
   hours+=h;
}

void Time::Reset(int h,int m )
{
   hours=h;
   minutes=m;
}
Time Time::Sum(const Time & t)const
{
   Time sum;
   sum.minutes=minutes+t.minutes;           
   sum.hours=hours+t.hours+sum.minutes/60;
   sum.minutes %=60;
   return sum;
}
void Time::Show()const
{
   std::cout<<hours<<" hours ,"<<minutes<<" minutes";
}

特别注意的是Time Time::Sum的参数是一个引用,使用引用的好处是当传入参数后,参数相当于有了个别名t,可以直接用t来作为对象调用数据成员。

方法重载

这段代码还可以用方法重载来实现,方法重载,顾名思义就是要重载方法,operator+表示重载加法,重载以后的加法就不同于我们之前使用的加法了,这里的加法是用来实现两个时间的加法,区别于我们之前的加法。

Time Time::operator+(const Time &t) const
{
   Time sum;
   sum.minutes=minutes+t.minutes;           
   sum.hours=hours+t.hours+sum.minutes/60;
   sum.minutes %=60;
   return sum;
}

三、main.cpp

定义一个对象,通过对象调用方法。

#include <iostream>
#include "mytime.h"

int main()
{
   using std::cout;
   using std::endl;
   Time planning;        //定义一个对象
   Time coding(2,40);    //定义一个对象,并初始化他的私有成员hours=2,minutes=40
   Time fixing(5,55);    //5小时55分钟
   Time total;

   cout<< "planning time= ";
   planning.Show();      //对象调用公有方法
   cout<<endl;           //换行

   cout<<"coding time=";
   coding.Show();
   cout<<endl;

   cout <<"fixing time=";
   fixing.Show();
   cout<<endl;

   total=coding.Sum(fixing);        //fixing是一个引用,作为参数传给sum,然后coding在调用sum
   cout<<"coding.Sum(fixing)=";
   total.Show();

   cout<<endl;

   return 0;
}

1、total=coding.Sum(fixing);

coding和fixing都是对象,一个作为参数(该参数为引用),一个作为调用的主体,这样就调用了Sum实现了两个对象内容的相加。
如果调用方法重载的函数则可以直接实现:
total=coding+fixing;

运行结果:
这里写图片描述

参考《C++ Premer Plus》

  • 9
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
定点小数单符号位加减运算是一种在程序实现的数学运算,其中使用固定的小数位表示数字,且只有一个符号位表示正负。 实现运算的关键是要理解定点小数的表示方法和加减运算规则。 假设我们使用8位来表示定点小数,其中1位表示符号位,剩下的7位表示小数部分。其中,最高位为权重为1的位,最低位为权重为1/64的位。符号位为0表示正数,为1表示负数。 对于加法运算,首先要判断两个运算数的符号位是否相同,如果相同,则直接将两个数的小数部分相加,并将结果与运算数中的符号位保持一致。如果符号位不同,则需要进行减法运算,即通过取反运算将负数转化为正数,然后进行相加操作,最后结果的符号位以绝对值较大的数的符号位为准。 对于减法运算,可以通过将减数取反后与被减数进行加法运算实现。 具体的C编程代码如下: ```c #include <stdio.h> #define FIXED_POINT_BITS 7 #define FIXED_POINT_FRACTION_BASE (1 << FIXED_POINT_BITS) #define FIXED_POINT_SIGNED_BIT_MASK (1 << (FIXED_POINT_BITS + 1)) typedef struct { int value; } FixedPointNumber; FixedPointNumber add(FixedPointNumber a, FixedPointNumber b) { FixedPointNumber result; result.value = a.value + b.value; return result; } FixedPointNumber subtract(FixedPointNumber a, FixedPointNumber b) { FixedPointNumber result; result.value = a.value - b.value; return result; } FixedPointNumber negate(FixedPointNumber a) { a.value = -a.value; return a; } int main() { FixedPointNumber a, b, sum, difference; a.value = 1 * FIXED_POINT_FRACTION_BASE; // 1.0 b.value = 0.5 * FIXED_POINT_FRACTION_BASE; // 0.5 sum = add(a, b); difference = subtract(a, b); printf("Sum: %f\n", (float)sum.value / FIXED_POINT_FRACTION_BASE); printf("Difference: %f\n", (float)difference.value / FIXED_POINT_FRACTION_BASE); return 0; } ``` 以上是一个简单实现定点小数单符号位加减运算的示例代码,用于展示实现的基本原理。具体实际应用可能会有更多的优化和处理逻辑。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值