运算符重载

运算符重载

运算符重载的实质是函数重载。+=是一个运算符,可重载。

函数调用运算符 

()比较特殊,通过它可以把对象当函数用~

重载为类的友元函数。

重载为类的成员函数。

此时,函数的参数个数将比原来的操作数少一个,因为对象本身充当了最左边的操作数。

前置单目运算符重载为成员函数时,形参为空。

后置单目运算符重载为成员函数时,形参为一个int参数。

重载赋值运算符

返回值是不是引用类型不影响连续赋值,但影响拷贝构造函数的调用次数。见图:

用引用:

 

 

不用引用:

 

重载=运算符要注意自我赋值的安全检查。比如

本行代码输出为2:int x=2;cout<<(x=x);

对于复杂类型T的对象tObj,++tObj与tObj++的执行效率相比哪个更快?

时间: 2024-07-31 17:02:29

运算符重载的相关文章

c++-C++ list赋值和类的运算符重载

问题描述 C++ list赋值和类的运算符重载 刚刚发现了个问题,一直卡着我 class CA { public: CA(){} ~CA(){} public: VOID operator = ( CA& msg ) { dwvalue = msg.dwvalue; } private: DWORD dwvalue; }; VOID Fuck1( OUT list& bb ) { list< CA > aa; CA a; CA b; aa.push_back(a); aa.pu

C++学习摘要之七:运算符重载

C++语言中预定义的运算符的操作对象只能是基本数据类型,但是,在实际应用中,对于很多用户自定 义数据类型(如类)也需要类似的功能,这就需要对已有的运算符赋予多种含义,使同一个运算符具有作 用于不同类性的数据导致不同类型的行为,这就是运算符重载.因此,运算符重载的目的是设置C++语言 中的某一运算符,让它们之间并不冲突,C++语言会根据运算符的位置辨别应使用哪一种功能进行运算. 可见,运算符重载的优点是允许改变使用于系统内部的运算符的操作方式,以适应用户新定义类型的类似 运算. 运算符重载的实质是

C++运算符重载赋值运算符

自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,如果没有指定默认的赋值运算符重载函数,那么系统将会自动提供一个赋值运算符重载函数. 赋值运算符重载函数的定义与其它运算符重载函数的定义是差不多的. 下面我们以实例说明如何使用它,代码如下: //程序作者:管宁//站点:www.cndev-lab.com//所有稿件均有版权,如要转载,请务必著名出处和作者#include <iostr

C++运算符重载转换运算符

为什么需要转换运算符? 大家知道对于内置类型的数据我们可以通过强制转换符的使用来转换数据,例如(int)2.1f;自定义类也是类型,那么自定义类的对象在很多情况下也需要支持此操作,C++提供了转换运算符重载函数,它使得自定义类对象的强转换成为可能. 转换运算符的生命方式比较特别,方法如下: operator 类名(); 转换运算符的重载函数是没有返回类型的,它和类的构造函数,析构函数一样是不遵循函数有返回类型的规定的,他们都没有返回值. 下面我看一个例子,看看它是如何工作的: //例1 //程序

C++运算符重载函数基础及其值返回状态

运算符重载是C++的重要组成部分,它可以让程序更加的简单易懂,简单的运算符使用可以使复杂函数的理解更直观. 对于普通对象来说我们很自然的会频繁使用算数运算符让他们参与计算,但是对于自定义类的对象来说,我们是无论如何也不能阻止写出像下面的代码一样的程序来的. 例子如下: class Test{ //过程省略}int main(){ Test a,c; c=a+a;} 当然这样的代码是不能够通过编译的,c++对自定类的算术运算部分保留给了程序员,这也是符合c++灵活特性的. 在c++中要想实现这样的

C++递增(增量)运算符重载的思考

在前面的章节中我们已经接触过递增运算符的重载,那时候我们并没有区分前递增与后递增的差别,在通常情况下我们是分别不出++a与a++的差别的,但的确他们直接是存在明显差别的. 先看如下代码: #include <iostream>using namespace std; int main(){ int a=0; ++(++a);//正确,(++a)返回的是左值 (a++)++;//错误,(a++)返回的不是左值 system("pause");} 代码中(a++)++编译出错误

C++中利用构造函数与无名对象简化运算符重载函数

在完整描述思想之前,我们先看一下如下的例子,这个例子中的加运算符重载是以非成员函数的方式出现的: //程序作者:管宁//站点:www.cndev-lab.com//所有稿件均有版权,如要转载,请务必著名出处和作者 #include <iostream>using namespace std; class Test{ public: Test(int a) { Test::a = a; } friend Test operator + (Test&,int); public: int a

Python运算符重载用法实例

  本文实例讲述了Python运算符重载用法.分享给大家供大家参考.具体分析如下: python中,我们在定义类的时候,可以通过实现一些函数来实现重载运算符. 例子如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 # -*- coding:utf-8 -*- ''''' Created on 2013-3-21 @author: naughty ''' class Test(object): def __init__(self, value): self.value = v

C++运算符重载 成员函数与友元函数详解

以下是对C++运算符重载 成员函数与友元函数进行了介绍,需要的朋友可以过来参考下   复制代码 代码如下: #include<iostream> using namespace std; class A {     int x,y;     public:     A(int xx,int yy):x(xx),y(yy){}     A(){x=0;y=0;}     A operator+(const A&b) //不加const限定,也可以     { return A(x+b.x

关于c++运算符重载总是有错误

问题描述 关于c++运算符重载总是有错误 在visual studio 2010 上 重载运算符<<输出复数 代码如下 #include using namespace std; class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} Complex operator +(Complex &c2); friend ostream& operator&