一道亚信联创笔试题--双目运算符的重载

2024-03-20 03:30

本文主要是介绍一道亚信联创笔试题--双目运算符的重载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

昨天做了亚信联创实习生的笔试,其中有一道题引发了讨论,代码大概如下:


#include <iostream>
using namespace std;class integer{public:integer(int value=0):value(value){}integer operator+(integer itg) {//双目运算符用成员函数重载return value+=itg.value;//返回值使用+=符号}friend ostream& operator<<(ostream& os,integer& it){return os << it.value;}   private:int value;
};int main()
{integer i;//i值为0cout << "i=" << i << endl;integer ii; //ii值为0
    ii = i+2;//这里会使得i和ii的值都变成2,因为之前+号重载时使用的return value+=it.value 这种形式ii = 2+i;//这一行将出现编译错误,因为没有前置加号的形式被重载cout << "i=" << i << endl;cout << "ii=" << ii << endl;return 0;
}

        不难发现本身是一个很简单的程序,只是单纯写了一个整形的类,然后输出来,但是题目里面+号运算符重载时使用的成员函数形式的重载,这回导致使用时只能让加号处于变量身后,而不是放在变量之前的问题;错误如图:


        其次就是重载+号时,返回值return 使用的value+=it.value,这样会改变当前对象的value值,使得i 和ii的值都变为2,显然这不是我们想要的结果。

        实际上,在运算符重载在,友元函数运算符重载函数与成员运算符重载函数的区别是:友元函数没有this指针,而成员函数有,因此,在两个操作数的重载中友元函数有两个参数,而成员函数只有一个。且不能用友元函数重载的符号有:“=,(),[],->”记住,成员函数必须是符号的做操作数。

        对于单目运算符,通常用成员函数,来的简便

        双目运算符,通常用友元函数,没有操作数左右的限制

        对于运算符” =,(),[],->”只能作为成员函数。


于是做修改如下:



#include <iostream>
using namespace std;class integer{public:integer(int value=0):value(value){}/*integer operator+(integer itg) {return value+=itg.value;}*/friend integer operator+(const integer& a,const integer& b){ return a.value+b.value;}friend ostream& operator<<(ostream& os,const integer& it){return os << it.value;}private:int value;
};int main()
{integer i;cout << "初始值i=" << i << endl;integer ii; ii = i+2;ii = 2+i;cout << "相加之后i=" << i << endl;cout << "ii=" << ii << endl;return 0;
}

输出结果:



一切正常。



这篇关于一道亚信联创笔试题--双目运算符的重载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/828142

相关文章

嵌入式软件常见的笔试题(c)

找工作的事情告一段落,现在把一些公司常见的笔试题型整理一下,本人主要是找嵌入式软件方面的工作,笔试的也主要是C语言、数据结构,大体上都比较基础,但是得早作准备,才会占得先机。   1:整型数求反 2:字符串求反,字符串加密,越界问题 3:字符串逆序,两端对调;字符串逆序,指针法 4:递归求n! 5:不用库函数,比较两个字符串的大小 6:求0-3000中含有9和2的全部数之和 7

一道经典Python程序样例带你飞速掌握Python的字典和列表

Python中的列表(list)和字典(dict)是两种常用的数据结构,它们在数据组织和存储方面有很大的不同。 列表(List) 列表是Python中的一种有序集合,可以随时添加和删除其中的元素。列表中的元素可以是任何数据类型,包括数字、字符串、其他列表等。列表使用方括号[]表示,元素之间用逗号,分隔。 定义和使用 # 定义一个列表 fruits = ['apple', 'banana

JavaSE (Java基础):运算符

3 运算符 3.1 二元运算符         为什么下面这段代码中最后的语句中b元素要加(double)呢?         因为要计算10/40的话,他们都是int类型的在计算机中会取整,而计算机取整一般都是直接舍去小数点后面的数字,那么就会返回0,使用(double)就是将b元素强制转换为double类型的变量,返回的值也就好也是double类型的了,直接返回结果为0.5 pac

Java基础(二)——数组,方法,方法重载

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 + TS + Pinia + Element Plus + Spring全家桶 + MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步至千里,积小流成江海 🥇推荐学习:🍖开源 rich-vue3 🍍前端面试

python中的*运算符

问题: self.resblocks = nn.Sequential(*[ResidualAttentionBlock(width, heads, attn_mask) for _ in range(layers)]) 这个里面的*是什么意思? 在 Python 中,* 运算符可以用于在函数调用时解包(unpack)列表或元组。这在构建 nn.Sequential 模块时尤其有用,因为 nn

【java编程(在线笔试)】【链表】两道k个一组翻转链表题目(包含非递归和递归两种解法)

一、给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点也翻转顺序。 1. 非递归解法 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {

运算符重载(重载为成员函数)

运算符重载 – 基本概念 郭  炜  刘家瑛 #include <iostream>using namespace std;//运算符重载,重载为成员函数.class complex{private:double real;double img;public:complex(int i=0.0,int j=0.0):real(i),img(j){}~complex(){}v

运算符重载(重载为普通函数)

运算符重载 – 基本概念 郭  炜  刘家瑛 #include <iostream>using namespace std;//this指针的应用class complex{private:double real;double img;public:complex(int i=0.0,int j=0.0):real(i),img(j){}~complex(){}void pr

C语言笔试题:实现把一个无符号整型数字的二进制序列反序后输出

目录 题目 实例 方法一:直接交换 方法二:间接交换 拓展 题目 编写一个函数,将一个无符号整数的所有位逆序(在32位机器下) 实例 例如有一个无符号整数  unsigned int num = 32; unsigned int 在32位系统中占4个字节(32位) 32的二进制数是:       0000 0000 0000 0000 0000 0000  0010

【牛客网 2017年校招模拟笔试(第一场)】超级素数幂

超级素数幂 描述 如果一个数字能表示为p^q(^表示幂运算)且p为一个素数,q为大于1的正整数就称这个数叫做超级素数幂。现在给出一个正整数n,如果n是一个超级素数幂需要找出对应的p,q。 输入 输入一个正整数n(2 ≤ n ≤ 10^18) 分析 暴力枚举幂q,将n开q次方之后得到p,检查p是否为素数,并且检查p的q次幂是否等于n。 *要注意精度问题,代码待之后补充。