1)C++入门级小知识,分享给将要学习或者正在学习C++开发的同学。
2)内容属于原创,若转载,请说明出处。
3)提供相关问题有偿答疑和支持。
对于系统的所有操作符,一般情况下,只支持基本数据类型和标准库中提供的class,对于用户自己定义的class,如果想支持基本操作,比如比较大小,判断是否相等,等等,则需要用户自己来定义关于这个操作符的具体实现。比如,判断两个人是否一样大,我们默认的规则是按照其年龄来比较,所以,在设计person 这个class的时候,我们需要考虑操作符==,而且,根据刚才的分析,比较的依据应该是age。那么为什么叫重载呢?这是因为,在编译器实现的时候,已经为我们提供了这个操作符的基本数据类型实现版本,但是现在他的操作数变成了用户定义的数据类型class,所以,需要用户自己来提供该参数版本的实现。
operator是c++中的关键字;
重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。一般的运算符的重载函数分为两类,一类是在类的内部的成员函数,一类是全局函数,不在类的内部的函数;与其他函数一样,重载运算符有一个返回类型和一个参数列表。
Box operator+(const Box&); 类中的成员函数定义格式
Box operator+(const Box&, const Box&); 非类的成员函数,如静态函数,由于不能使用对象访问,因此对于双目运算符,必须传递两个参数
看一个例子来简单认识一下操作符==的重载:
一般的重载包括单目运算符的重载(++、--等),以及双目运算符的重载(+、-、*、/等),多目运算符的重载,但是对于多目的一般很少使用;
首先看一个双目运算符的重载:
上面的例子实现双目运算符+的操作,也就是当两个不是基本类型的对象相加的是时候编译器尝试重新解释运算符,如果定义了符合的类型编译器就会尝试去调用,如上面的实现operator+就是重现解释的函数;为了安全以及效率,我们可以将上面的形式修改成如下:使用引用形式
同样对于一个不属于类的全局函数的重载方式,与类中的重载方式有点不同:
单目运算符的重载:单目运算符是只有一个操作数的运算,如取负号-、++、--等等
但是对于++、--有前加加或者是后加加,
C++约定,在自增(自减)运算符重载函数中,增加一个int类型的形参,就是后置自增(自减)运算符函数。
如下例子: