重载运算符语法讲解

重载运算符

这篇随笔我来讲解一下C++语言中重载运算符的相关知识。

一、重载运算符的用途

这是一个比较哲学的问题:我们为什么要重载运算符?

理由就是,我们C++语言中已经给出的运算符(包括算数运算符和逻辑运算符)只是针对C++语言中已经给定的数据类型进行运算,假如我们想要对我们的自定义数据类型进行运算的话,则需要重载运算符,我们可以把重载运算符理解成对已有的运算符的一种重新定义。

比如:

double a,b,c;
a=1/3;
b=1/2;
c=a+b;
printf("%lf",c);

这段程序输出的肯定不是两个分数相加的结果。
这时候我们就可以重载运算符+。

二、重载运算符的实现

语法格式如下(非常重要)

<返回类型> operator <运算符符号>(<参数>)
{
    <定义>;
}

这里我们举一个例子。

在优先队列(priority_queue)中,存储的元素较大的会被放到堆顶。如果存的是int或者string等类型还好办(因为他们本身就可以互相比较大小),如果是我们自定义的结构体类型,那就需要重载<运算符。

比如:

struct node
{
    int id;
    double x,y;
}//定义结构体
bool operator <(const node &a,const node &b)
{
    return a.x<b.x && a.y<b.y;
}//重载运算符“<”

注:这里的结构体保存了一个整型变量id,两个长浮点变量x,y,表示坐标。

这里的重载运算符先比横坐标后比纵坐标。

三、重载运算符的注意事项。

以下运算符不可重载:

关系运算符"."

成员指针运算符".*"

作用域运算符"::"

sizeof运算符

三目运算符"?:"

重载运算符限制在C++语言中已有的运算符范围内的允许重载的运算符之中,不能创建新的运算符。

运算符重载实质上是函数重载。

好了,关于重载运算符的基本知识基本已经被科普完了,这是C++语言程序设计中非常非常常见的一种操作手段。请大家务必重视并用大量例题熟练掌握。

下课~祝同学们AK IOI!!

原文地址:https://www.cnblogs.com/fusiwei/p/11314650.html

时间: 2024-10-04 00:21:31

重载运算符语法讲解的相关文章

重载运算符实例

C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作.例如: class complex {  public:   complex(double r=0.0,double I=0.0){real=r;imag=I;}   void display();  private:   double real;   double imag; }; complex a(10,20),b(5,8); “a+b”运算如何实现?这时候我们需要自己编写程序来说明

编写高质量代码改善C#程序的157个建议——建议9: 习惯重载运算符

建议9: 习惯重载运算符 在开发过程中,应该习惯于使用微软提供给我们的语法特性.我想每个人都喜欢看到这样的语法特性: int x = 1; int y = 2; int total = x + y; 而不是用下面的语法来完成一样的事情: int x = 1; int y = 2; int total = int.Add(x, y); 同理,在构建自己的类型时,我们应该始终考虑该类型是否可以用于运算符重载.如果考虑类型Salary,下面的这段代码看起来就不是那么舒服了: Salary mikeIn

PID控制器的数字实现及C语法讲解

PID控制器的数字实现及C语法讲解 概述 为方便学习与交流,根据自己的理解与经验写了这份教程,有错误之处请各位读者予以指出,具体包含以下三部分内容: (1)  PID数字化的推导过程(实质:微积分的近似计算): (2)  程序风格介绍(程序风格来源于TI官方案例): (3)  C有关语法简述(语法会结合实例进行讲解). PID控制器的数字化 PID控制器是工业过程控制中广泛采用的一种控制器,其中,P.I.D分别为比例(Proportion).积分(Integral).微分(Differentia

C++学习之重载运算符1

C++除可重载函数之后,还允许定义已有的运算符,这样通过运算符重载可像处理数据使用它们. 先来个代码 1 #include<iostream> 2 using namespace std; 3 4 class num 5 { 6 public: 7 num(){n=1;} 8 ~num(){} 9 int get() const{return n;} 10 void set(int x){n=x;} 11 private: 12 int n; 13 }; 14 15 int main() 16

矩阵求和--重载运算符

C++习题 矩阵求和--重载运算符 [Submit][Status][Web Board] Description 有两个矩阵a和b,均为2行3列.求两个矩阵之和.重载运算符"+",使之能用于矩阵相加(如c=a+b). 重载流插入运算符"<<"和流提取运算符">>",使之能用于该矩阵的输入和输出. Input 两个2行3列矩阵 Output 矩阵之和 Sample Input 1 2 34 5 67 8 91 2 3 Sa

重载()运算符和重载强制类型转换

// 研究了半宿.最终弄清楚了 // 写了这段測试代码能够非常好的演示效果 class CConvert { public: CConvert(){m_nValue = 10;} // 重载()运算符 int operator ()(); // 重载int强制类型转换 operator int(); protected: private: int m_nValue; }; int CConvert::operator ()() { return m_nValue; } CConvert::ope

Verilog HDL基础语法讲解之模块代码基本结构

Verilog HDL基础语法讲解之模块代码基本结构 ? 本章主要讲解Verilog基础语法的内容,文章以一个最简单的例子"二选一多路器"来引入一个最简单的Verilog设计文件的基本结构. 以下为本章中例子中的代码: 01????/*======================================= 02????*????file neme : mux2.v 03????*????author????:????小梅哥 04????*????Verison????:????

C++自学笔记_重载运算符_《C++ Primer》

#include <iostream> #include <stdexcept> using namespace std; class CheckedPtr{ public: CheckedPtr(int *b,int *e,int *c): beg(b),end(e),curr(c){ } CheckedPtr(const CheckedPtr &obj): //复制构造函数 beg(obj.beg),end(obj.end),curr(obj.curr){ } Chec

作为类的成员函数,重载运算符只能有一个参数

1 overload a operator of a class, you can only use one para., this pointer is automatically used. class Rational { public: //not correct since this ponit would be used automatically. //Rational operator+ (const Rational& lhs, const Rational& rhs);