减法中的意外输出

Unexpected output in substraction

本文关键字:意外 输出      更新时间:2023-10-16
#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-的定义是错误的。你指的是gi,而不是你正在做-的两个人。它应该是这样的:

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