笔记:运算符的重载

C++中添加了对象这一概念,为了满足对象相加的情况,引入运算符重载这一语法。
代码中倘若是除类的基本类型相加的没有影响,我们理解为机内已经写好了相关的代码,但如果出现了对象互相相加,对象与基本类型相加的情况,由于对象的多样性,机内无法对所以情况加以概括,所以有了operator;
倘若是类与基本类型相加的情况时:

#include 
#include 
#include 

using namespace std;

class peo {
    public:
        int age;

        peo(){
            age=12;
        }
}; 
//类型一一对应 
//预算符重载的返回值为了进行连续运算 
//类外定义
int operator+ (peo& st,int a) {
    return (st.age+a);  
} 
int main() {
    peo st1;
    cout << (st1+12) <return 0;
}

从以上代码中可以看出operator基本语法类型,可以将它视为一种特殊的函数加以理解;
1.其中加号的两对对应的运算符重载的形参要一一对应;
2.返回值可以有多种,和普通函数相差无几;
3.代码中出现的只要非基本类型与基本类型相加的情况,都要用函数写出,否则错误
4.运算方式与以往算数运算方式一样

类内定义:

#include 
#include 
#include 

using namespace std;

class peo {
    public:
        int age;

        peo(){
            age=12;
        }
        //类内定义 
        int operator+ (int a){//局限性:默认左侧是类 
            return (this->age+a);
        }
}; 
//类型一一对应 
//预算符重载的返回值为了进行连续运算 
//int operator+ (peo& st,int a) {
//  return (st.age+a);  
//} 
int main() {
    peo st1;
    cout << (st1+12) <return 0;
}

为何在类中定义只需要一个参数?
有一种理解方式是:在类中的成员函数有一个默认参数(类似于this指针)
总结:类内定义运算符重载有局限性,运算符左侧默认是类!!!
必须是C++的有效字运算符才可以重载的,(否则不可以重载)其中作用与运算符(::),(.*)和(.),(?:)四种虽然是有效字符,但是也不能重载;
必须包含一个类的参数,因为基本类型的运算机内已经编写(仔细想想即可)
怎么判断使用类内定义还是类外定义,以下有几种判断方式:
1.改变对象状态的运算符,递增,自加等等,通常是类内定义(单目)
2.算数预算符,关系预算符,位运算通常是在类外定义
3.复合运算符 +=,-=等通常是类内定义
4.=,(),[],->,必须是类内定义

你可能感兴趣的:(C/C++)