首页 > 编程语言 >C++温故补缺(八):运算符重载和函数重载

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

时间:2023-03-20 23:24:46浏览次数:45  
标签:Box const 函数 运算符 operator 重载 温故

运算符重载和函数重载

重载是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);
}

标签:Box,const,函数,运算符,operator,重载,温故
From: https://www.cnblogs.com/Tenerome/p/cppreview8.html

相关文章

  • C++温故补缺(七):;类的访问控制和继承
    类的访问控制和继承类的静态成员类的静态成员用关键字static修饰,类似静态变量或静态函数,也是有共享的概念类的静态变量:静态变量在类的所有对象中共享,不能再类的定......
  • C++温故补缺(六):友元函数、内联函数和this指针
    友元函数、内联函数和this指针友元函数友元函数是定义在类的外部,但有权访问类的所有私有(private)和保护(protectd)成员.友元函数的原型在类的定义中出现,但它并不是类......
  • C++温故补缺(十五):多线程
    多线程参考:CSDN,知乎传统C++(C++11之前)中并没有引入线程的概念,如果想要在C++中实现多线程,需要借助操作系统平台提供的API,如Linux的<pthread.h>,或windows下的<windows.......
  • C++温故补缺(十四):信号处理
    信号处理信号是由操作系统传给进程的中断,能够提前终止一个程序。在Unix,Linux,MacOS或Windows系统上,都可以通过Ctrl+C产生中断。下面是可以在程序中被捕获的信号,并且可......
  • C++温故补缺(十三):模板
    C++模板模板是泛型的基础,泛型编程就是一种独立于任何特殊类型的方式编写代码。模板就是创建泛型类或泛型函数的蓝图。STL库中的几个数据结构(vector,list,map等)以及算法......
  • C++温故补缺(十二):动态内存
    C++动态内存同C,C++中也是有堆和栈的概念。栈是函数内部声明的所有变量都所占用空间,堆是程序中未使用的内存,在程序运行期间可用于动态分配。同样也有alloc()分配内存,新增......
  • C++温故补缺(十一):异常
    异常处理参考:cnblogs异常和错误(bug)异常:是程序开发过程中必须考虑的一些特殊情况,是程序运行时可以预料的执行分支。异常是不可以避免的,如0除问题,数组越界问题,文件不存在......
  • C++温故补缺(十):C++文件读写和流
    C++文件和流C++文件的读写流用的是fstream库,它定义了三个新的数据类型:数据类型描述ofstream该数据类型表示输出文件流,用于创建文件并向文件写入信息。ifstr......
  • C++重载
    返回值不能作为重载的依据intfun()const;intfun();常成员函数可以用于重载无法重载的情况voidfun(inta);voidfun(constinta);普通值传递和const传递无法......
  • this关键字,多类合作,继承,多类合作的扩展,继承,重写和重载,抽象类声明
    1.this关键字字面意思:​ 这个​ 1.一般写在实体类中。表示的是当前的对象​ 可以使用this调用属性和方法​ 2.this关键字可以调用构造方法(很少用)​ ......