首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++ 运算符重载基本概念

— 1 — 运算符重载需求 C++ 预定义运算符,只能用于基本数据类型运算:整型、实型、字符型、逻辑型等等,且不能用于对象运算。...比如,在数学上,两个复数可以直接进行+、-等运算,但在C++,直接将+或-用于复数对象是不允许。有时会希望,让对象也能通过运算符进行运算。这样代码就更简洁,也容易理解。...运算符重载基本形式如下: 返回值类型 operator 运算符(形参表) { ... } 下面举个例子,实现对复数对象+和-运算符重载: class Complex // 复数 { public...如:c = a + b; 等价于c = operator+(a,b) 在上面的代码,我把重载+号运算符普通函数,在Complex复数定义成了友元函数,目的是为了友元函数能访问对象私有成员,否则会编译报错...为什么重载-号和+号运算符函数参数表是const Complex & c常引用类型而不是Complex c呢?

1K40

C++笔记:运算符重载

C++笔记:运算符重载 引言 函数重载就是对一个已有的函数赋予新含义,使之实现新功能,做到“一名多用”。 运算符也可以重载,在C++标准库也使用了大量运算符重载。...) 运算符重载和方法 成员函数作为运算符重载函数 友元函数作为运算符重载函数 class Complex //复数 { public: //使用成员函数重载运算符+ Complex...将双目运算符重载为友元函数时,形参表列必须有两个参数,形参顺序任意。...重载运算符规则 C++ 不允许用户自己定义新运算符,只能对已有的 C++ 运算符进行重载C++ 绝大部分运算符允许重载。...重载双目运算符 例: 声明一个复数Complex,有部和虚部组成,重载运算符“+” “-” “+=”,“-=” ,实现复数相应运算。

78520
您找到你想要的搜索结果了吗?
是的
没有找到

C++和对象之赋值运算符重载

前言 在前面的博客中提到了拷贝构造: 【C++和对象之拷贝构造函数篇,和 运算符重载C++和对象之常引用与运算符重载,接下来继续来看赋值运算符重载赋值运算符重载。 2....原因:赋值运算符如果不显式实现,编译器会生成一个默认。此时用户再在外自己实现一个全局赋值运算符重载,就和编译器在中生成默认赋值运算符重载冲突了,故赋值运算符重载只能是成员函数。...用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值方式逐字节拷贝。注意:内置类型成员变量是直接赋值,而自定义类型成员变量需要调用对应赋值运算符重载完成赋值。...对内置类型值拷贝,自定义类型调用对应拷贝构造和赋值重载。 既然编译器生成默认赋值运算符重载函数已经可以完成字节序值拷贝了,还需要自己 现吗?当然像日期这样是没必要。那么下面的呢?...C++规定:后置++重载时多增加一个int类型参数,但调用函数时该参数不用传递,编译器自动传递 注意:后置++是先使用后+1,因此需要返回+1之前旧值,故需在实现时需要先将this保存一份,然后给

9910

C++】操作符重载应用—— 重现

(虽然流提取不会出现这种情况,为了统一,一并写在外) 2.流插入写在外访问内成员方法——友元 但是成员是private(私有的),我们可以通过友元(声明操作符重载函数能进入内访问权限...<=等】 1.代码展示: 内声明: PS:加const,可以让普通变量和const变量都能调用该函数(具体知识点可见YYC++知识合集博客,关于const解读) bool operator...YYC++知识合集博客,关于const解读) PS:const加在后面表示const Date* this ;表明在该成员函数不能对任何成员进行修改,而+=,-=是要实现对内成员改变,因此不能加...; Date& operator+=(int day); Date operator+(int day) const; Date& operator-=(int day); Date operator...增加参数int,构成函数重载 2.代码展示: 内声明: //增加这个int参数不是为了接收具体值,仅仅是占位,跟前置++构成重载 Date& operator++(); Date operator

8310

C++与对象项目实践 — 日期管理工具

项目背景 在现代软件开发,日期作为一个常见基础需求,广泛用于各类系统日程管理,数据分析,交易记录等场景。但是C++时间日期功能比较有限,无法满足复杂开发需求。...为此我们需要开发一款简单高效“日期C++项目。 项目需求 日期结构设计:我们需要实现一个名为“Date”C++自定义类型,包含年(_year),月(_month),日(_day)。...日期有效性检查:Date需要实现对日期有效性严格检查,确保月份正常,保证闰年判断,符合各个月份实际天数。...析构函数: 简单地将日期成员变量设为0,但在实际应用这通常不是必要,因为生命周期结束后,系统会自动释放其占用内存资源。..._day; } 2.3 析构函数 析构函数简单一写即可,因为我们没有开辟空间,不需要考虑复杂问题。

10510

(转载非原创)C++运算符重载介绍

C ++ 预定义运算符操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如),也需要类似的运算操作。...: " 以外,C ++ 所有运算符都可以重载。 ( 2 ) 重载运算符限制在C ++ 语言中已有的运算符范围内允许重载运算符之中,不能创建新运算符。...比如说你重载+号,如果写在外面,那么是需要两个参数,而写在里面,只能写一个参数,因为当这个函数被调用时候,会自动传一个this指针进去,就是对象本身,所以只需要一个参数 ( 2 ) 前置单目运算符重载成员函数时...比如前置++,和后置++,带一个整形形参只是为了区分 1|21.2 友元运算符 有些运算符是一定得声明为友元,比如>运算符 因为=,+这些运算符,是c++最基本运算符,而>>,<<运算符是标准头文件里面的一个里面写.../wanghongyang"; //重载,运算符重载函数作为友元函数 Vec2D operator+(const Vec2D& v1, const Vec2D& v2) { Vec2D ret

82400

运算符重载基本规则和习惯用法是什

运算符重载通用语法 在重载时,你不能更改 C++ 内置类型运算符含义,只能对自定义类型[1]运算符进行重载。也就是,运算符两边操作数至少有一个是自定义类型。...运算符重载三个基本规则 C++ 重载有三个基本规则, 如果一个运算符含义不是很清楚时候,它就不应该被重载。 如果非要这样的话,倒不如直接提供一个函数来实现你想要功能。...., Nov, Dec} 你想为它重载递加和递减运算符,但是你是无法实现它们为成员函数,因为在 C++ ,枚举类型压根就没有成员函数这一说。...还有,对于嵌套在模板模板,operator<() 作为内联成员函数会更方便去读写成员变量,但这种情况不是经常能遇到。 普通运算符重载用法 重载运算符大部分代码都是固定。...这个时候显示转换就显得很有必要。

71210

C++奇迹之旅:从0开始实现日期时间计算器

_day; } return *this; } 此时此刻,头文件大致完成了,我们接下来要来实现简单大小比较操作: 如这些通用运算符重载,你可以吧他们加到头文件Date.cDate里public...*this; } 两种方法都是要创建新变量,效果一样,第一种创建变量,拷贝构造,然后复用+=,返回要创建临时对象,这种方式优点是,在调用 operator+ 时,不需要重复计算日期更新逻辑,因为...operator+= 已经实现了这个逻辑。...调用 operator-= 函数将当前日期对象减 1 天,返回保存临时日期对象。 前置递减运算符通常更高效,因为它不需要创建临时对象。...自定义流输入和输出 通常我们可以输入时候是不是想这样输入:cin>>d1或者输出cout<<d2,如下面这个流运算符重载,我们知道重载这里有this指针,顺序是this ,cout,那么它传参表示是

7810

C++和对象练习——日期实现

前言 在上一篇文章我们学习和对象过程,我们不是写了一个日期嘛。 但是我们之前实现日期并不是很完整,我们只是借助它来帮大家学习和对象知识。...另外呢,我们最终实现是一个完整日期,那方便对代码进行维护和管理,以及对实现好日期进行测试,我们还是像之前写数据结构一样,放在多个文件。 1....C++规定:后置++重载时多增加一个int类型参数,但调用函数时该参数不用传递(它作用就是为了构成重载),编译器自动传递。 所以呢,这样搞就行了。...不过我们今天写这个日期,里面我是所有成员函数声明和定义都分离了,大家以后可以根据实际情况,有些成员函数直接定义在里面。...另外还有一点: 上一篇文章我们不是还学习了const成员函数嘛,大家还可以看一看我们日期这么多成员函数,哪一个在函数内部不需要改变调用它对象,是不是把它实现成const成员函数也是比较好

23110

C++修炼之路】4. 和对象():日期实现

C++之类和对象()后续 本节目标 1....(分离后,函数定义采用::限定符来确定是属于这个函数),并且我们将这些运算能进行一定复用从而减少代码量 框架搭建好之后,就需要利用我们上个文章运算符重载内容将日期加、减、等操作进行一系列实现...因此,C++规定:将括号带有int规定为后置++,不带int为前置++ 。...当我们单拿出来之后,会发现,这样访问变量是私有变量,由于这个函数不在,我们通过这个函数不能访问私有变量,因此也就是需要把private限定解开,变成public,虽然这样可以,但却失去了对于内部成员保护...会变成:d.operator>(*this),而d在这个函数是const限定不可修改,传入>运算符重载之后,就会使得权限放大,因此,我们也需要对这些比较运算符this指向没人进行const

76200

C++实战——日期实现

接下来,根据减少月份重新计算_day值。首先获取减少后月份天数,然后将_day加上这个天数。 最后,返回当前对象引用。 通过重载"-="运算符,可以实现给Date对象减少指定天数操作。...关于重载比较运算符为什么要加外部const 在C++,比较运算符重载通常需要将其定义为成员函数。在重载比较运算符时,我们需要考虑到两个方面: 在比较运算符重载,我们不希望修改成员变量。...示例 const Date d1(2024,4,11); d1< d2 会报错,是因为this指针在里是Date* const this修饰C++成员函数有一个隐含指向当前对象指针...如果允许将常量对象传递给非常量指针,就会破坏常量对象只读属性。为了确保对象常量性,C++编译器会报错。 所以,this指针接受一个常量会报错。...+=(int day); Date& operator-=(int day); Date operator+(int day); Date operator-(int day); bool operator

5810

C++和对象 练习小项目---日期实现.

个人主页: :✨✨✨初阶牛✨✨✨ 推荐专栏1: C语言初阶 推荐专栏2: C语言进阶 个人信条: 知行合一 本篇简介:>:为了更好理解C++和对象知识,我们可以动手实现一下C++一个简单日期...✨ 前言 这是我们需要实现日期接口声明,我们需要是在Date.cpp文件实现函数定义. class Date { public: // 获取某年某月天数 int GetMonthDay...int _day; }; 一、构造函数 1.1 默认构造函数 声明:(在Date) //Date.h // 全缺省构造函数 Date(int year = 2023, int month =...这个参数用户在使用时不需要传递,编译器会自动传递,本质是为了让前置++和后置++进行函数重载....++构成函数重载,调用时候不需要传参. { Date tmp = *this;//要保存++前日期大小.

22220

日期计算器实现以及运算符重载

前言  众所周知,运算符重载C++与对象中非常重要一环。今天我们介绍内容就是通过模拟实现日期计算机,来详细了解运算符是如何重载。 注:代码给在文末。...---- 目录 前言 创建一个日期 1、重载 == 号 2、重载 > 号 3、复用重载  > 和 == 来重载 >= 、!...注: 这里写GetMonthDay还去要判断是否是闰年,所以我们传参还需要传年份。         由于这个函数经常用到,我们直接到内定义作为对象内联函数。        ...但是我们知道,如果这个函数是在Date,那么函数第一个参数就会是this指针,那么到时候输出指令就应该是 d1 << cout 那这样和我们预期就颠倒了,所以我们需要在 Date 外来定义...注意以上5个运算符不能重载这个经常在笔试选择题中出现。

28070

使用重载运算符实现一个复数(C++实验十)

参考链接: C++程序使用运算符重载减去复数 使用重载运算符实现一个复数   实验目的: 1.掌握用成员函数重载运算符方法 2.掌握用友元函数重载运算符方法   实验要求:   定义一个复数,描述一些必须成员函数...定义运算符重载函数,通过重载运算符:+,-,,/,直接实现二个复数之间加减乘除运算。编写一个完整程序,测试重载运算符正确性。...=直接实现复数比较运算,编写一个完整程序,测试重载运算符正确性。   ...friend Complex operator*(Complex &c1,Complex &c2);//用友元函数实现重载     Complex operator-(Complex &c);//用成员函数实现重载...=(Complex &c1,Complex &c2); private:     double re;//复数部     double im;//复数虚部 }; //重载+运算符 Complex operator

1.5K30

C++与对象(2)

但如果是传引用,就不存在这个问题了,因为存引用本身就是给实参起一个别名,函数调用时候操作是同一块空间,不需要创建新对象也不需要拷贝。所以不会引发无穷递归!...但是C++*this指针是隐含参数,我们没办法直接加,C++为了解决此类问题,规定当我们将const修饰放在成员函数后面的时候,默认就是将该成员函数隐藏*this进行const修饰 将const...+=(int day); Date operator+(int day) const; //日期减天数 Date& operator-=(int day); Date operator-(int...,cin属于istream 我们还可以发现为什么cout和cin可以自动识别类型呢??...我们先尝试重载<<打印日期 如果我们在Date内部去对<<重载,要使用的话是这样 为什么是这样呢?因为在Date里面定义的话默认Data是第一个操作数,d1<<cout显然不符合我们习惯。

10210

C++】日期实现

在实现日期过程,日期加减天数应用场景一定会频繁使用到这个函数接口,因为加减天数会使得月份发生变化,可能增月或减月,这个时候就需要在day上面扣除或增加当年当月天数,所以这个接口非常重要。...为了方便获取到某年某月天数,我们将数组大小设置为13,以便月份能够和数组下标对应上,并且我们将数组设置为静态,就不需要考虑每次调用函数建立栈帧后重新给数组分配空间事情了,因为数组一直被存放在静态区...由于Date成员变量都是内置类型,所以析构函数不需要我们自己写,因为没有资源申请。并且拷贝构造和赋值重载不需要写,因为Date不涉及深拷贝问题,仅仅使用浅拷贝就够了。 3....至于取地址重载和const对象取地址重载,本身就不需要我们写。...起始流插入和流提取重载非常简单,本质上就是利用了库实现实例化对象cin和cout,他们完全支持输出编译器内置类型,而所有的自定义类型实际上都是内置类型堆砌而成,我们只需要在重载中将对象内置类型一个个输出即可

56820

C++ 重载运算符 继承 多态 (超详细)

)双目运算符重载为成员函数 当重载运算符为双目运算符时,形参表只有一个参数作为右操作数。...,但是还不成熟,咱们一点一点来丰满这个代码,这个。...(3)单目运算符重载为成员函数 此时参数表没有参数,只有当前对象作为运算符一个操作数。...(3) 友元函数重载+重载输入输出流(用稀烂用多比较重要) 在左右操作数类型不同时上述重载方式都不能正常使用,这时候就需要两个操作数,在重载,因外不能直接调用,所以要把该函数声明为友元。...这个规则可以简述为能放基地方,放派生一定可以使用,在程序需要使用基对象地方都可以用公有派生对象代替。

1K21

C++ 日期Date实现(运算符重载

参考链接: 递增++和递减-C++编程运算符重载 C++ 日期Date实现(运算符重载)   该类综合考察了关于基本操作,包括构造,拷贝构造,析构,运算符重载等方面的知识。 ...Date内容和实现   1. 该日期主要实现日期时间加减递增递减等基本运算 2. 主要通过运算符重载来实现日期各种运算 3....重载运算符之间会反复调用,测试阶段数据逐一进行测试,易于排错  Date.cpp  #pragma once #include using namespace std; class...        }         return *this;     }     // 析构函数     ~Date()     {}     // 日期+=天数     Date& operator...                _month = 1;             }         }         return *this;     }     // 日期+天数     Date operator

1.2K10

C++与对象(日期计算器)

今日更新了与对象日期计算器内容 欢迎大家关注点赞收藏⭐️留言 头文件 #include #include using namespace std; class...=(const Date& d) const; Date& operator+=(int day); Date operator+(int day) const; Date operator-...构成重载区分 //d1++ Date operator++(int); //日期-日期 int operator-(const Date& d) const; //如果不声明和定义分离,本质就是内联...在外面声明时,为了不把private打开,可以进行友元声明,就可以在不打开private情况下,访问private。...+规定:后置++重载时多增加一个int类型参数,但调用函数时该参数不用传递,编译器自动传递 Date Date::operator++(int) //规定只能是int,形参名字可以不写 { Date

9310
领券