第四题:
一。思路。做这道题非常的纠结,究其原因,主要还是对基本内容掌握的不够扎实,就是几个简单的重载就写成了这个样子…………
(1)引用的问题
HugeInt operator+(HugeInt p);//重载+。两个类相加的类型
HugeInt HugeInt::operator +(int num)
{
int i;
HugeInt r(0);
for ( i = 0; i < MAX ; i ++ )
{
    r.value[i] += value[i] + num % 10;
    if ( r.value[i] > 9 ){
        r.value[i] -= 10;
        r.value[i+1] ++;
    }
    num /= 10;
}
if ( value[len] ) len ++;
r.len = len;
return r;
}
如果写成这个样子HugeInt & operator(HugeInt p),就会报错,因为可以看到,r是在函数中才定义的,但是传值为引用的话,就是这样
HugeInt & temp = r;也就是说temp和r公用一段内存空间,他们就是一个东西,但是因为temp是局部定义的,而隐含着的HugeInt & temp 斌斌不是在这

个函数中定义的,所以可能根本知不道任何东西,这是非常危险的,会报错
这个改正的方法是
HugeInt r(0);把这句改为static HugeInt r(0);然后就可以定义为这个样子HugeInt & operator(HugeInt p)

在钱能的书中详细讲述了函数返回值是引用时的一些情况

#include<iostream>

using namespace std;

float temp;

float fn1(float r)

{

temp=r*r;

return temp;

}

float &fn2(float r)

{

temp=r*r;

return temp;

}

int main()

{

float a=fn1(5.0);

float &b=fn1(5.0);

float c=fn2(5.0);

float &d=fn2(5.0);

return 0;

}

首先,请注意temp是全局量,这点很重要。

然后,需要明确函数返回值的方式,以最简单的fn1为例,返回值是temp,但是编译器并不直接返回temp,而是创建一个临时变量t,然后把temp的值赋给t,

返回主函数之后,float a=fn1(5.0);其实就是float a=t;然后编译器把t  delete掉

看第二种方式,此时就是说b和t指向的是同一段内存空间,但是我们知道编译器在解释完这一句话之后就会自动把临时变量t  delete,那么这时t指向的是什么东西呢?有一些编译器可能会对这种情况有特殊解释,但是不能保证在每一个编译器上都能解释,所以这是很危险的写法

此时最好写为这样(主函数中)float x=fn2(5.0);float &b=x;

第三种模式,此时不会创建新的内存空间,因为返回的是引用,编译器默认为不生成临时变量t而是直接赋值,所以会提高效率

第四种方式就是让三种中的&c=t;但是如果temp不是全局量就会有问题!还是与二相同的问题

(2)c++规定重载++时,如果有形参参数中有int,就是后置自增,否则为前置自增。(int  是没有用的)

(3)

重载为普通函数时,参数个数为运算符目数
重载为成员函数时,参数个数为运算符目数减一。这两条蛮重要的,加以留心!

第三题:

此题的有点歪,我想成了重载<<,但是实际上是没有必要的,直接重载[],与()即可

转载于:https://www.cnblogs.com/pkusirius/archive/2010/05/14/1735718.html

程设13次作业总结--运算符重载相关推荐

  1. c++第八周【任务1-3】实现复数类中的运算符重载

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: * 作 者: ...

  2. python 运算符重载_《fluent python》第 13 章 正确重载运算符

    引言 有些事情让我不安,比如运算符重载.我决定不支持运算符重载,这完全是个人选择,因为我见过太多 C++ 程序员滥用它--James Gosling(Java 之父) ps: 运算符重载它不香吗 写在 ...

  3. 黄浩老师cpp平时作业(十三)圆形正方形类 运算符重载组合类圆和点(排序与查找题目重复)

    解释:排序与查找题目与前面传重了,这个题目也没有面向对象,嗯,没有提醒老师,我不想多写题 狗头 基于类的链表稍后整理模板的时候上传吧,这题就不另传了,tas上有基于结构体的链表实现 运算符重载 //b ...

  4. C++入门:构造函数,析构函数,拷贝构造函数,运算符重载详解

    目录 类的6个默认成员函数 一.构造函数 1.概念 2.特征如下: (1) 函数名与类名相同. (2)无返回值. (3)对象实例化时编译器自动调用对应的构造函数. (4)构造函数可以重载. (5)如果 ...

  5. 北大郭炜《程序设计与算法(三)》Mooc笔记:运算符重载和继承

    文章目录 运算符重载 运算符重载的基本概念 赋值运算符的重载 为什么引入赋值运算符重载? 浅拷贝和深拷贝 对operator=返回值的讨论 复制构造函数的相同困境 运算符重载为友元函数 实例:可变长数 ...

  6. C++阶段03笔记02【类和对象(封装、对象的初始化和清理、对象模型和this指针、友元、运算符重载、继承、多态)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 1.内存分区模型 2.引用 3.函数提高 4.类和对象 4.1.封装 4.1.1.封装的意义 --实例1:设计圆类 --实例2: ...

  7. c++重载(以运算符重载为主)

    重载(OverLoading)是面向对象程序设计多态性的一种体现.所谓重载,是指"同一标识符"在同一作用域的不同场合具有不同的语义,这个标识符可以是函数名或运算符.也就是说,重载可 ...

  8. C++中的运算符重载

    1.Cpp中的重载运算符和重载函数 C++允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载.重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但 ...

  9. Java为什么不提供运算符重载?

    从C ++到Java,一个显而易见的未解决问题是Java为什么不包括运算符重载? 不是Complex a, b, c; a = b + c;吗Complex a, b, c; a = b + c; C ...

最新文章

  1. Docker Compose学习之docker-compose.yml编写规则 及 实战案例
  2. 斥候密报_斥候密报《最强王者》三国幕后巾帼之黄月英_吉吉建站手游网
  3. discuz 服务器维护,论坛服务器经常宕机 - Discuz!-安装使用 - Discuz! 官方站 - Powered by Discuz!...
  4. js ---- 对象转JSON,JSON转对象
  5. 面经——Linux内核及驱动
  6. 如何获取函数的变长参数(va_list, va_start, va_arg, va_end)
  7. Linux下Oracle新建一个数据库、启动多实例数据库
  8. 达观智能制造知识图谱平台助力实现先进制造业“十四五”规划
  9. MySQL数据库中防止SQL注入、防止脱库
  10. 硬盘分区表损坏修复实录
  11. left join一对多只保留一条结果的解决方法
  12. 低代码局中局:是IT革命还是高级外包? | 甲子光年
  13. 如何自定义您的Nintendo Switch主屏幕
  14. python中4j_GitHub - Byron4j/PythonVeterans: Python新手到老鸟的历程;基于Python 3.6
  15. 基于python的动物判别系统
  16. UDF开发手册 - UDF
  17. 计算机启动盘安装教程,笔记本系统重装教程,笔记本电脑u盘启动盘装系统教程...
  18. html 自动生成表格,HTML 表格生成
  19. Respond JS有什么作用
  20. 使用jQuery加DIV实现可以动态添加的金字塔结构

热门文章

  1. IBM Webpshere6(WAS6) bug发现一例
  2. 2021-10-20 Speaking Class
  3. 剑指offer: 不用加减乘除做加法
  4. 201621123053 张雨阳软工作业2
  5. Java中如何读写cookie (二)
  6. 理解oracle的共享连接和专用连接
  7. Exchange 2007 SP1 如何定时清理日志???
  8. Linux系统高可用集群软件之Keepalived
  9. 浙江大数据交易中心正式上线
  10. leetcode 264. Ugly Number II