原题目如下:

请为判断函数isEqualTo编写一个简单的函数模板,isEqualTo函数利用等号运算符(==)判断两个同类型的参数是否相等,如果相等则返回true;反之返回false。在主函数中,利用函数模板,对多种内置数据类型(int/char/double)调用isEqualTo函数。
接着,定义Someclass类,该类具有两个数据成员。请为该类添加必要的成员函数,使得在主函数中能够调用isEqualTo函数判断两个对象是否相等。

测试用例如下:

Sample Input:
3 5
d t
3.5 7.8
2 5.6
Sample Output:
3 and 5 are not equal
d and t are not equal
3.5 and 7.8 are not equal
The class objects (1,1.1) and (2,5.6) are not equal
Sample Input:
2 4
d D
1.2 1.2
1 1.1
Sample Output:
2 and 4 are not equal
d and D are not equal
1.2 and 1.2 are equal
The class objects (1,1.1) and (1,1.1) are equal

然后开始写吧,在认真掉发 思考后写出的源代码:

#include<iostream>
using namespace std;template<typename T>
bool isEqualTo(T& x,T& y)
{if(x==y) return true;else  return false;
}
//函数模板
class SomeClass
{public:int x;double y;SomeClass(int xx=0,double yy=0){x=xx;y=yy;}bool operator==(SomeClass& z);friend istream& operator>>(istream &in ,const SomeClass &z);friend ostream& operator<<(ostream &out ,const SomeClass &m);};
istream& operator>>(istream &in ,const SomeClass &z){in>>z.x>>z.y;return in;
}
ostream& operator<<(ostream &out ,const SomeClass &m){out<<"("<<m.x<<","<<m.y<<")";
}bool SomeClass:: operator==(SomeClass& z)
{if(z.x==x&&z.y==y) return 1;else return 0;
}int main()
{int a;   // integers used forint b;   // testing equality// test if two ints input by user are equal
//    cout << "Enter two integer values: ";cin >> a >> b;char c;  // chars used forchar d;  // testing equality// test if two chars input by user are equal
//    cout << "\nEnter two character values: ";cin >> c >> d;double e;   // double values used fordouble f;   // testing equality// test if two doubles input by user are equal
//    cout << "\nEnter two double values: ";cin >> e >> f;SomeClass g( 1, 1.1 );  // SomeClass objects usedSomeClass h;  // for testing equalitycin >> h;cout << a << " and " << b << " are "<< ( isEqualTo( a, b ) ? "equal" : "not equal" ) << '\n';cout << c << " and " << d << " are "<< ( isEqualTo( c, d ) ? "equal" : "not equal" ) << '\n';cout << e << " and " << f << " are "<< ( isEqualTo( e, f ) ? "equal" : "not equal") << '\n';// test if two SomeClass objects are equal// uses overloaded << operatorcout << "The class objects " << g << " and " << h << " are "<< ( isEqualTo( g, h ) ? "equal" : "not equal" ) << '\n';return 0;} // end main

看上去已经大功告成,写完后,小媛喝了口茶,她知道,事情没有那么简单。于是,在本地编译通过后,运行时在输入三组数之后总会自动结束。
新一轮的掉发头脑风暴后(实际是改了一两个小时无果,就随便试试)终于发现:
如果重载流运算符>>时将去掉const,就可以输入第四组数,并完成isEqualTo函数模板功能。

**~~~~~~~~~~~~~~**
分隔符:好啦,小媛准备明天的c++期末考试去了,考完试会再来讲述她的奇(diao)妙(fa)之旅

2020/06/19更新~~~~我来了~
前天考完c++,又摸了一天的鱼,终于要放暑(xue)假(xi)了,不过在此之前还是要写完这道题:
首先来回顾一下整道题的详细思路:
根据题意,首先利用函数模板写出isEqualTo函数,因为后面要利用它判断真假,因此定义为一个bool类型,在SomeClass类中有数据成员,构造函数,==操作符重载,输入输出流重载。 其中 ==操作符重载是因为函数模板中对SomeClass类型的相等判定需要我们自己定义,返回值依旧是bool类型的。
问题来了,在对流输入运算符<<运算符重载参数你用的是一个SomeClass类型的参数,为了安全起见,你加了const,使其变为只读。可是下面你要给类的数据成员赋值,和const的只读性矛盾,可是编译器却不会报错,只有在你运行时才能发现错误,如果代码量比较大,你又不容易debug,所以这种错误还是比较浪费时间的。

**总结:

一个很小却比较有用的知识点:我们老师讲过一句话:“当const可加可不加时,最好加上”,没错,加const的确有利于数据的安全性,可是在重载流输入运算符时,由于接受的参数是需要修改的,因此参数不能加const的。
最后可以参考这篇文章,对运算符重载中的const有比较详细的分析:

https://blog.csdn.net/weixin_43734095/article/details/104465307

最后的最后(* ̄︶ ̄),如果有不妥的地方欢迎批评指正。

isEqualTo函数模板久久不能通过,到底是小媛掉发过少,还是发量太多,种种谜团围绕在本题周围。让我们跟随Jine一起探索谜团背后的悬疑。相关推荐

  1. C++学习笔记35:函数模板

    函数模板 函数模板的目的 设计通用的函数,以适应广泛的数据型式 函数模板的定义格式 template<模板型式参数列表>返回值型式 函数名称(参数列表): 原型:template<c ...

  2. 好看的悬疑电影,最好是高智商的

    <穆赫兰道>:公认史上最难懂的电影!据说40%的人从电影一开始就理解错误,还有50%的人从头到尾都不知道电影在说什么.看懂这部电影,请先熟读弗洛伊德<梦的解析>. <死亡 ...

  3. C++知识点62——模板实参推断与函数模板的特化

    一.函数指针与模板实参推断 可以用函数模板初始化一个函数指针或给一个函数指针赋值 示例 template <typename T> int comp(const T &a, con ...

  4. 好物推荐丨故宫出品“烧脑奇书”:豆瓣9.2分,悬疑解谜参与感强,11种结局,可以玩一年!...

    本产品酷玩实验室提供,量子位推荐,如有商品咨询.退换货等售后问题,请联系商城客服. 江湖上流传着这样一句话:"故宫的文创只有一个缺点,就是缺货买不到". 已经退休的单院长曾轻描淡写 ...

  5. C++ 泛型编程(一):模板基础:函数模板,类模板,模板原理,模板匹配规则

    类模板 函数模板 泛型编程 泛型编程,泛型即是指具有在多种数据类型上皆可操作的含义,其实就是能够帮助开发者编写完全一般化并可重复使用的算法,同样的工作不需要做多次,同样的算法针对不同的类型也不应该写多 ...

  6. 深入理解c++中的函数模板

    非类型模板参数 模板参数分类类型形参与非类型形参. 类型形参:出现在模板参数列表中,跟在class或者typename之类的参数类型名称. 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类 ...

  7. 初识c++中的函数模板

    函数模板 函数模板概念 函数模板:编译器生成代码的一个规则.函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本. 函数模板格式 //要让这个函数与类 ...

  8. C++ 泛型编程(一):模板基础:函数模板、类模板、模板推演成函数的机制、模板实例化、模板匹配规则

    文章目录 泛型编程 函数模板 函数模板实例化 隐式实例化 显式实例化 函数模板的匹配规则 类模板 类模板的实例化 泛型编程 泛型编程旨在削减重复工作,如: 将一个函数多次重载不如将他写成泛型. voi ...

  9. 函数模板和普通函数区别

    /***Copyright (c) 2018 Young Fan.All Right Reserved.*Filename: 2 函数模板和普通函数区别*Author: Young Fan*Date: ...

最新文章

  1. bBank 开源Javascript框架(最后更新:2010-7-6)
  2. 工业定焦镜头的选型公式
  3. gpedit msc组策略面板 win10在哪里_Win10家庭版找不到组策略gpedit.msc的解决方法
  4. pytorch torch.zeros
  5. java 图形 登录_Java图形界面——登录框
  6. Taro开发微信小程序遇到的问题和解决方法
  7. 【自我救赎--牛客网Top101 4天刷题计划】 第三天 渐入佳境
  8. live555 RTSP服务器建立及消息处理流程
  9. Node.js nvshens图片批量下载爬虫 1.00
  10. 常用H桥电机驱动模块L298N原理及应用
  11. 怎么从零基础学计算机打字,新手学电脑打字 0基础打字快速上手教程
  12. OSError: could not get source code
  13. LINUX HTB队列规定用户指南
  14. 服务器芯片和一般电脑芯片的区别,服务器CPU和PC的CPU区别
  15. 创建一个xposed模块Demo
  16. win10系统用激活码激活,用dos命令来激活,只能激活半年时间,暂时没找到永久的。
  17. python os popen_【转】python os.popen 超时问题
  18. 笔记:蛋白质结构预测在线工具
  19. [教你警告消除]Warning[Pe1072]: a declaration cannot have a label!
  20. SQLI DUMB SERIES-4

热门文章

  1. 通信2M传输基本知识
  2. 舆情监测专题报告写作内容及格式参考模板
  3. Firebird 2.5的部分操作
  4. 为什么在css中设置了font-family: 微软雅黑没有用
  5. 【Java SE】设计模式
  6. 什么是正交,函数空间,希尔伯特空间,施密特正交化,线形代数基础
  7. “区块链+大数据”如何构建智慧城市生态圈
  8. 如何引流购物粉?如何引流网购粉?怎么吸购物粉?
  9. JS如何阻止浏览器缓存
  10. 印度身上中国软件能学什么