Fork me on Github Fork me on Gitee

C++温故补缺(八):运算符重载和函数重载

运算符重载和函数重载

重载是c++多态性的一大体现,重载运算符是给运算符添加新的定义,使之前不能运算的对象变得可运算,且一般和运算符的意义相似.

函数重载主要是同名函数参数类型不同,参数个数不同,实现不同的功能

运算符重载

运算符重载一般作用于类的对象运算,因为它需要相同返回类型和参数,运算符重载依赖关键字operator,格式:

返回类类型 operator<符号>(const 类&)

Box operator+(const Box&)

例:

#include<iostream>
using namespace std;

class Box{
    public:
        int a;
        Box operator+(const Box& b){
            Box b1;
            b1.a=this->a+b.a;
        }
};

因为要用到this指针,所以运算符重载类中的,它的原理就是:

obj3=obj1+obj2,obj1是发生重载的对象本身,用this调用其成员;obj2是传入const obj&对象,用形参名来调用成员,obj3就是返回值。

可重载的运算符和不可重载的运算符
  • 可重载:
双目算术运算符 + (加),-(减),*(乘),/(除),% (取模)
关系运算符 ==(等于),!= (不等于),< (小于),> (大于),<=(小于等于),>=(大于等于)
逻辑运算符 |(逻辑或),&&(逻辑与),!(逻辑非)
单目运算符 + (正),-(负),*(指针),&(取地址)
自增自减运算符 ++(自增),--(自减)
位运算符 | (按位或),& (按位与),~(按位取反),^(按位异或),,<< (左移),>>(右移)
赋值运算符 =, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>=
空间申请与释放 new, delete, new[ ] , delete[]
其他运算符 ()(函数调用),->(成员访问),,(逗号),[](下标)
  • 不可重载

.:成员访问运算符

.*, ->*:成员指针访问运算符

:::域运算符

sizeof:长度运算符

?::条件运算符

#: 预处理符号

运算符重载不止可以在类中实现,还可以在结构体中实现
#include<iostream>
using namespace std;

typedef struct test{
    int a;
    test operator+(const test& t){
        test temp;
        temp.a=t.a+this->a;
        return temp;
    }
}T;


int main(){
    T t1,t2,t3;
    t1.a=12;
    t2.a=15;
    t3=t1+t2;
    cout<<t3.a;
}

函数重载

函数重载体现在相同的函数名和不同形参列表上,和java等都类似

如:

#include<iostream>
using namespace std;

void print(int a){
    cout.precision(0);
    cout<<a<<endl;
}

void print(float a){
    cout.precision(2);
    cout<<a<<endl;
}

void print(double a){
    cout.precision(4);
    cout<<a<<endl;
}

int main(){
    float pi=3.1415926;
    print(pi);
}
posted @ 2023-03-20 23:19  Tenerome  阅读(43)  评论(0编辑  收藏  举报