首页 > 其他分享 >运算符重载&const修饰符

运算符重载&const修饰符

时间:2023-06-03 16:22:56浏览次数:34  
标签:const hour min int 修饰符 运算符 sec 参数

运算符重载

运算符重载一般作为类的成员函数实现,用于实现自定义类的运算操作。

[返回值] operator[运算符](参数...){...};

参数

  • 参数个数必须与运算符原意需要的参数相同,比如重载+,就需要两个参数(左参数和右参数)
  • 对于单目运算符,不需要传入参数,以为已经默认将成员this指针指向的对象作为参数传入
  • 对于双目运算符,只需要传入一个参数做为右参数,左参数已经默认为this指针指向的对象

返回值

返回值的类型取决于重载的运算符的作用

应用

设计一个时间类,重载+号使得两个时间相加显示正确的时间

class Time
{
	int _hour;
	int _min;
	int _sec;
public:
	Time(int hour = 0, int min = 0, int sec = 0)
	{
		_hour = hour;
		_min = min;
		_sec = sec;
	}
	void Print()
	{
		cout << _hour << ":" << _min << ":" << _sec << endl;
		
	}
	Time operator+(int min)//加分钟
	{
		 Time t(*this);//因为是+号,规定不能改变左右参数的值,所以使用t来取和用以返回。
		 t._min += min;
		 if (t._min > 59)//检查时间正确性
		 {
			 t._hour += (t._min / 60);
			 if (t._hour > 23)
				 t._hour /= 24;
			 t._min %= 60;
		 }
		 return t;
	}
};
int main()
{
	Time a(10, 30, 30);
	(a + 140).Print();
    return 0;
}

流提取>>与流插入<<

因为流运算符是双目运算符,所以this指针指向的类应该放在运算符左边,流对象应该放在运算符右边,但这与我们实际使用的场景刚好相反。
我们需要让左参数指向流,右参数指向类,因此重载就不能做为类的成员函数出现了。此时,需要用到友元函数friend,友元函数本身是一个普通函数,但作为类的友元,能够调用类的成员,包括private。并且参数不用被类限制为第一个必须是this指向的指针。

#include"head.h"
class Time
{
	friend ostream& operator<<(ostream& out, Time& t);//友元函数,声明
	friend istream& operator>>(istream& in, Time& t);
	int _hour;
	int _min;
	int _sec;
public:
	Time(int hour = 0, int min = 0, int sec = 0)
	{
		_hour = hour;
		_min = min;
		_sec = sec;
	}
	
};
ostream& operator<<(ostream& out, Time& t)//流插入
{
	out << t._hour << ":" << t._min << ":" << t._sec << endl;
	return out;
}
istream& operator>>(istream& in, Time& t)//流提取
{
	in >> t._hour >> t._min >> t._sec;
	return in;
}
int main()
{
	Time a;
	cin >> a;
	cout << a;
	return 0;
}

标签:const,hour,min,int,修饰符,运算符,sec,参数
From: https://www.cnblogs.com/starkly/p/17453922.html

相关文章

  • C语言-运算符
    算术运算符 算术运算符专门用于算术运算,主要有下面几种。+:正值运算符(一元运算符)-:负值运算符(一元运算符)+:加法运算符(二元运算符)-:减法运算符(二元运算符)*:乘法运算符/:除法运算符%:余值运算符(1)+,-+和-既可以作为一元运算符,也可以作为二元运算符。所谓“一元运算符”,指的是只需要一个运算数......
  • 无法删除索引 1553 - Cannot drop index ‘fk_pptn_r_emtc‘: needed in a foreign ke
    标题标题:解决问题:1553-无法删除索引‘fk_pptn_r_emtc’:外键约束需要引言:在数据库管理中,经常会遇到各种问题和错误。其中之一是"1553-无法删除索引‘fk_pptn_r_emtc’:外键约束需要"错误。这个错误可能会导致数据库操作受阻,影响系统的正常运行。在本篇博客中,我们将深入探讨这......
  • android基础-ConstraintLayout
    资料约束布局ConstraintLayout看这一篇就够了ConstraintLayout布局居中|居右实现。ConstraintLayout中TextView文字超过屏幕问题ConstraintLayoutConstraintLayout字体超出屏幕解决方法约束布局ConstraintLayout看这一篇就够了具体的方法layout_constraintLeft_toLeftOflayout_c......
  • 利用Flutter的LayoutBuilder、BoxConstraints创建自适应布局控件
    简介在Flutter中,LayoutBuilder是一个Widget,用于构建一个包含父组件约束的子组件。它可以获取父组件的约束信息并将其传递给子组件进行布局。LayoutBuilder的主要作用是让子组件根据父组件的大小进行自适应布局。LayoutBuilder的作用是在子控件构建之前获取父级容器的大小,并将其传......
  • C语言——运算符和表达式
    所谓表达式就是指由运算符、运算量和标点符号组成的有效序列,其目的是说明一个计算过程。表达式可以独立成语句:表达式;运算符按功能分为:算术运算、赋值运算、关系运算、逻辑运算、位运算以及其他运算符1.算术运算符:+-*/%++–(1)/:整数相除,向下取整。inta=3/2;floatb=3/2;fl......
  • 二级指针与const
    二维数组分配:#include<iostream>intmain(){introws=3;intcols=4;//使用二级指针创建一个动态分配的二维数组int**array=newint*[rows];for(inti=0;i<rows;i++){array[i]=newint[cols];}//给数组赋值intcount=0;......
  • 关系运算符加法
    题目描述请编写一个函数,将两个数字相加。不得使用+或其他算数运算符。给定两个intA和B。请返回A+B的值测试样例:1,2返回:3classUnusualAdd{public:intaddAB(intA,intB){//writecodeherewhile(B!=0){inttemp=A......
  • day16 Python下的三元运算符
    Python下的三元运算符【一】引言三元表达式(三目运算符)能够简洁我们的代码三元表达式其实是将if...else...判断语句的简化表达,代替很多ifelse和if-else一样,只有一个表达式会被执行。因此,三元表达式中的if和else可以包含大量的计算,但只有True的分支会被执行在Java、C......
  • C++ 中的运算符优先级
     运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。例如x=7+3*2,在这里,x被赋值为13,而不是20,因为运算符*具有比+更高的优先级,所以首先计算乘法3*2,然后再加......
  • 位运算符
     位运算符作用于位,并逐位执行操作。&、|和^的真值表如下所示:pqp&qp|qp^q00000010111111010011假设如果A=60,且B=13,现在以二进制格式表示,它们如下所示:A=00111100B=00001101-----------------A&B=00001100A|B=0......