减法中的意外输出
Unexpected output in substraction
#include<iostream>
#include<string>
using namespace std;
template <class T>
T subtract(T x,T y)
{
T diff;
diff = x - y;
return diff;
}
class Person
{
friend ostream& operator<<(ostream&, const Person&);
private:
string lastName;
string firstName;
int age;
public:
void setValues(string, string, int);
Person operator-(Person);
};
Person g, h, i;
ostream& operator<<(ostream& out, const Person& per)
{
out << per.firstName << " " << per.lastName << " " <<
per.age << " years old" << endl;
}
void Person::setValues(string last, string first, int ager)
{
lastName = last;
firstName = first;
age = ager;
}
Person Person::operator-(Person p)
{
Person temp;
temp.lastName = "Difference";
temp.firstName = "Age";
temp.age = g.age - i.age;
return temp;
}
int main()
{
g.setValues("Mitchell", "Donald", 40);
h.setValues("Clayton", "Rita", 35);
i = g - h;
cout << g << endl;
cout << h << endl;
cout << i << endl;
return 0;
}
在此程序中,函数模板相互减去对象。但是,它不能正确输出项目。例如,它应该输出:
唐纳德·米切尔 40 岁
丽塔·克莱顿 35 岁
年龄差 5 岁
它目前输出:
唐纳德·米切尔 40 岁
丽塔·克莱顿 35 岁
年龄差 40岁
如何修复此错误? 谢谢你的时间。
你对operator-
的定义是错误的。你指的是g
和i
,而不是你正在做-
的两个人。它应该是这样的:
Person Person::operator-(const Person& p)
{
Person temp;
temp.lastName = "Difference";
temp.firstName = "Age";
temp.age = this->age - p.age; // You can omit this->
return temp;
}
这是全局变量咬你的一个很好的例子。如果没有全局变量,编译器会立即向您显示此问题。
您的运算符函数计算年龄不正确。它应该是
temp.age = this->age - p.age
相关文章:
- 字符串比较中的意外输出
- 来自 decltype 的意外输出类型
- 字符数组到十六进制字符串的转换 - 意外输出
- 使用 boost::regex 从目录中获取带有一些正则表达式的文件名称时出现意外输出
- 使用后序遍历递归的深度优先搜索会产生意外输出
- C++的意外输出
- 贝金纳C++练习解决方案的意外输出
- 无效* 转换获得意外输出
- 以下程序的意外输出
- 意外输出:矢量矢量(功率集)
- 基本 int 数组提供意外输出
- 线程的意外输出
- 减法中的意外输出
- 带有左移操作员C 的意外输出
- C strncpy意外输出
- 意外输出..函数绑定在虚拟表中的发生方式
- 星号的意外输出
- 已编译的 protobuf 文件的意外输出路径
- 打印对象矢量的意外输出
- 递归函数用于计算 n 个数字之和的意外输出