C++学习八

类的使用

运算符重载

运算符重载属于C++的一种多态形式,这种多态表现在编译期。而另外一种多态是虚函数,表现在运行期,原因是编译器只能在运行时候才能确定程序到底调用的是父类还是子类的虚函数。

运算符函数格式

operatorop(argument-list)

运算符重载实例

//mytime0.h
#ifndef MYTIMEO_H_
#define MYTIMEO_H_
class 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;//Time operator+(const Time&t)const;重载+运算符
	void Show()const;
};
#endif
//mytime0.cpp
#include<iostream>
#include"mytime0.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;
}
/*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;
}*/
void Time::Show()const
{
	std::cout<<hours<<"hours,"<<minutes<<" minutes";
}

:operator double()const;//类型转换方法声明,可用来类与double类型之间的转换,返回double类型数据,但是函数原型不用声明返回类型。
友元

类外部访问私有成员的唯一方法就是友元。

创建友元

friend Time operator*(double m,const Time&t);//声明友元

定义注意两点:1.不要使用Time::限定符。2.不要使用关键字friend。

重载<<运算符

void operator<<(ostream&os,const Time&t)//定义
{
	os<<t.hours<<"hours,"<<t.minutes<<"minutes";
}
cout<<trip;//4 hours ,23 minutes

但是这种重载方法有个问题,比如cout<<“trip:”<<trip;//error 因为在上述实现中并没有返回一个os对象,因此要改成以下形式:

ostream & operator<<(ostream& os,const Time& t)
{
	os<<t.hours<<"hours,"<<t.minutes<<"minutes";
	return os;
}

有趣的是,这个operator<<()版本还可以用于将输出写入到文件中:

#include<fstream>
....
ofstream fout;
fout.open("savetime.txt");
Time trip(12,40);
fout<<trip;//等同于operator<<(fout,trip);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值