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》