C++ 减法中的意外输出 #包括 #包括 使用名称空间std; 样板 T减去(T x,T y) { T差; diff=x-y; 返回差; } 班主任 { friend ostream&operator

C++ 减法中的意外输出 #包括 #包括 使用名称空间std; 样板 T减去(T x,T y) { T差; diff=x-y; 返回差; } 班主任 { friend ostream&operator,c++,C++,您的运算符函数计算年龄不正确。应该是 #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&,

您的运算符函数计算年龄不正确。应该是

#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;
}

您对
操作员-
的定义是错误的。您引用的是
g
i
,而不是您正在对其执行
-
操作的两个人。应该是这样的:

temp.age = this->age - p.age

这是一个很好的全局变量咬你的例子。如果没有全局变量,编译器会立即向你显示这个问题。

temp.age=g.age-i.age;
你确定你的意思是
g
i
吗?你的
操作符如果你要粘贴这么多代码,你应该将参数改为常数reference@UKMonkey或者,保留
p
一个值,并使用
p
而不是
temp
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;
}