赋值运算符

  • 1. 赋值运算符
  • 2. 运算符重载总结
    • C++中不允许重载的运算符
    • 重载运算符有以下几个限制

1. 赋值运算符

例1:

class CDate
{int year;int month;int day;
public:CDate(int y, int m, int d) :year{ y }, month{ m }, day{ d }//带参数的构造函数{}CDate(const CDate& dt) :year(dt.year), month(dt.month), day(dt.day) {}  //拷贝构造函数~CDate() {}//析构函数——没有参数的CDate & operator=(const CDate& dt)//引用{if (this != &dt)//防止自己给自己赋值-取地址{year = dt.year;month = dt.month;day = dt.day;}return *this;}
};

赋值运算符如下:

例2:

lass Int
{private:int value;
public:Int(int x = 0) :value( x ){cout << "create Int: " << this << endl;}Int(const Int& it) :value( it.value ){cout << "copy Int:" << this<< endl;}void Print() const{cout << "value:" << value <<  endl;}Int& operator=(const Int& it){if (this != &it){value = it.value;}cout << "operator=" << this<< endl;return *this;}~Int() {cout << "destroy " << this << endl;}
};
//任何情况下,不要将临时对象以引用返回
Int& fun()  //引用返回,不会再构建对象,当函数结束,对象的生存期也会跟着结束
{Int tmp(10);return tmp;
}
int main()
{Int a(0);a = fun();a.Print();return 0;//想要赋值,等号左边一定要有对象,赋值是对象与对象之间进行赋值。}

注意:
①任何情况下,不要将临时对象以引用返回,而且当函数结束,对象的生存期也会跟着结束;
②想要赋值,等号左边一定要有对象,赋值是对象与对象之间进行赋值。

2. 运算符重载总结

①运算符重载函数的函数名必须为关键字operator加一个合法的运算符。在调用该函数时,将右操作数作为函数的实参。
②当用类的成员函数实现运算符的重载时,运算符重载函数的参数(当为双目运算符时)为一个或(当为单目运算符时)没有。运算符的左操作数一定是对象,因为重载的运算符是该对象的成员函数,而右操作数是该函数的参数。
③单目运算符“++”和“–”存在前置与后置问题:
前置“++”格式为:
返回类型 类名:: operator ++(){ }
而后置“++”格式为:
返回类型 类名::operator++(int){ }
注意:后置“++”中参数int仅用作区分,并没有什么实际意义,可以给一个变量名,也可以不给变量名。
④C++中只有极少数的运算符不允许重载。

C++中不允许重载的运算符


还有#,##,//,/**/也不能进行运算符的重载。

重载运算符有以下几个限制

①不可臆造新的运算符;
②不能改变运算符原有的优先级,结合性和语法结构,不能改变运算符操作数的个数;例如,双目就是2个;
③运算符重载不宜使用过多;
④重载运算符含义必须清楚,不能有二义性。

2022.7.12 C++——赋值运算符和运算符重载的总结相关推荐

  1. python计算复数的辐角_Python 自定义类中的函数和运算符重载

    如果你曾在字符串(str)对象上进行过 + 或 * 运算,你一定注意到它跟整数或浮点数对象的行为差异: >>> # 加法 >>> 1 + 2 3 >>& ...

  2. 92_特殊方法(魔术方法)和运算符重载

    96.特殊方法(魔术方法)和运算符重载 python - 特殊方法查找-文档1 python - 特殊方法-文档2 Python的运算符实际上是通过调用对象的特殊方法实现的.比如: 测试代码1 a = ...

  3. C++友元和运算符重载

    C++友元 友元就是friend修饰函数或者类,友元只是单纯的提供一个场所赋予对象具有无视权限功能(不是说直接就可以访问另一个数据) 友元函数 友元函数不属于类,就是一个普通函数,类外实现不需要类名限 ...

  4. 从零开始学C++之运算符重载(三):完善String类([]、 +、 += 运算符重载)、和运算符重载...

    在前面文章中使用过几次String类的例子,现在多重载几个运算符,更加完善一下,并且重载流类运算符. []运算符重载 +运算符重载 +=运算符重载 <<运算符重载 >>运算符重 ...

  5. C++学习记录---(6)类和对象-----友元和运算符重载

    1.友元 友元可以让一个函数或者其他类访问一个类中的私有成员. 主要分为,全局函数做友元.其他类做友元和成员函数做友元. (1)友元 在类中声明: friend 函数名(): (2)其他类做友元 在类 ...

  6. go语言笔记——是c开发的 lex yacc进行词法和语法分析,go不支持函数和运算符重载,不支持类型继承,也不支持断言,还有泛型...

    从 Go 1.0.3 版本开始,不再使用 8g,8l 之类的指令进行程序的构建,取而代之的是统一的 go build 和 go install 等命令,而这些指令会自动调用相关的编译器或链接器. 如果 ...

  7. C++之操作符重载和运算符重载

    一.学习要点: 1.类中定义的构造器可以必须在类中声明,但定义可以在类内和类外. 2.插入器和吸取器的构造类型必须输入参数和输出参数都含有对象,这样可以不断保证右插. 3.而且输入输出中都含有流的引用 ...

  8. python方法与重载_python特殊方法和运算符重载(番外--重载)

    python的运算符实际上是通过对象的特殊方法实现的 [例如] a=20 b=30 c=a+b d=a.__add__(b) print("c=",c) print("d ...

  9. CSharp(C#)语言_第六章(表达式和运算符)

    表达式和运算符 6.1 表达式 6.2 字面量 6.2.1 整数字面量 6.2.2 实数字面量 6.2.3 字符字面量 6.2.4 字符串字面量 6.3 求值顺序 6.4 简单算术运算符 6.5 求余 ...

最新文章

  1. Maven学习笔记(二) :Maven的安装与配置
  2. WM8962 HPOUT 信号强度 时间周期
  3. Python ImportError: No module named 'requests'解决方法
  4. socket.io笔记
  5. 积跬步,聚小流-------js实现placeholder的效果
  6. deploy.php
  7. R+Hadoop大数据方案有哪些坑?
  8. 【Machine Learning 三】线性代数回顾:矩阵,矩阵运算,向量,转置
  9. 如何查看linux的版本?
  10. 如何使用阿里云打造离线下载服务器?
  11. 计算机存储换算 2GB等于多少MB,一gb等于多少mb 1gb等于多少mb?存储单位的含义和换算【详解】...
  12. ORA-29339: tablespace block size 32768 does not match configured block sizes
  13. LiveZilla 详细 配置 设置 (四) 查看成果及总结
  14. Unity实现将图片上传到服务器功能
  15. 刚刚,北大智能学院成立!AI视觉泰斗朱松纯教授任院长
  16. ireport+Jasper 动态改变字体大小
  17. linux C-kermit 安装使用
  18. win10 卸载cuda
  19. 程序员如何保持身心健康?
  20. 中国煤炭行业运行战略分析及十四五发展方向建议报告2022-2028年版

热门文章

  1. 洛谷 P3594 [POI2015]WIL-Wilcze doły 题解
  2. ❀论文篇❀Context Based Emotion Recognition Using EMOTIC Dataset论文翻译
  3. 小空间大智慧 小户型装修地板选择
  4. WIN7 64位 x64虚拟网卡驱动
  5. 如何将微信聊天记录导出为pdf
  6. 解读PHP面试-高并发解决方案类考察点
  7. 汽车钣金模具设计规范
  8. 软件测试面试题:怎样看待加班问题?
  9. ionic3+cordova使用qr扫描仪
  10. Python数据分析实战之用户消费行为数据分析