C++基础----运算符重载

好久没看书了,还是觉得基础很重要。之前,看到“眼熟”的概念或知识,总觉得自己会,却不知道那只是“以为”和“感觉”,即使说“会”。也只是知道点点皮毛,根本不知道所谓。直到跑出去面试,才发现其实面试的东西都是基础,很多时候,很多场面,很多知识,也只有自己真正身临其境的时候才能真正体现自己所学,所感,所悟。就是因为平时总是以“以为”和“感觉”来评判自己,才会造就什么都知道,却什么也不精的悲剧,最近想了很多,这种情况的根源在于自己平时说的太少,悟的太少,真正说出口的更少(即交流的太少),我觉得要想进步,还是得彻底改变自己的学习方式,可以把自己对书上知识的理解写成自己的话,可以以博文形式,可以和别人交流,更有甚者-----自言自语。我觉得我还是选择前者比较好(好过自言自语哈),一点点来,慢慢进步。相信!

Code:

#include "iostream.h"
class CTime{
private:
	int hour;
	int minute;
	int second;
public:
	CTime(){}
	CTime(int x,int y,int z):hour(x),minute(y),second(z){}
	CTime(CTime &Temp):hour(Temp.hour),minute(Temp.minute),second(Temp.second){}
	CTime& operator++();
	CTime operator++(int);
	friend ostream & operator<<(ostream &out,CTime CC);
};

//以成员函数方式重载前置++
 CTime& CTime::operator++(){
	if(++second>=60){
		second-=60;
		minute++;

		if(minute>=60){
			minute-=60;
			hour++;
		}
	}
	  return *this;
}


//以成员函数方式重载后置++
 CTime CTime::operator++(int){
	 CTime CC(*this);
	 if(++second>=60){
         second-=60;
		 minute++;

		 if(minute>=60){
            minute-=60;
			hour++;
		 }
	 }
	  return CC;
 }

 ostream & operator<<(ostream &out,CTime CC){
  return out<<CC.hour<<":"<<CC.minute<<":"<<CC.second<<endl;
 }



int main(int argc,char *argv[]){

	CTime C(8,59,56);
    CTime D(C);
	cout<<++C;
    return 0;
}


这个程序很简单,那些基本的重载不想写进去(也没必要),这里第一问题是拷贝构造函数那里得注意,参数必须得是引用,若不用引用由会出错.原因:会陷入不断的构造中.即无限递归,

第二问题,前置++和后置++的区别,看到这里重载的实现,便能更清楚的了解平时的操作结果,前置++返回的是引用类型,说明其可以连续引用,即作为左值,而后置++只是返回一个临时变量,只能以一个右值形式出现,重载输出也一样。

第三个问题便是成员函数和友元函数的区别,为什么有些为成员函数,有些为友元(而且还必须是),一般而言,重载运算符都可申明为友元函数,成员函数一般可以省略第一个参数(该参数是类类型),友元函数却不能省略。而当第一个参数不是类类型时,就像上面的operator<<函数一样。它的第一参数就是流类型,它不能以out.operator<<(CTime & CC)正确表达,为了访问类成员函数,故其必须申明为友元。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值