运算符重载问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 07:29:30
#include<iostream>
#include<string.h>
using namespace std;
class Teacher
{
char name[10];
char ID[20];

float bonus;
float income_tax;

public:
float salary;
float real_income;
Teacher(char*,char*);
Teacher(char*,char*,float,float,float);
void SetIncome();
float cal_realincome()
{real_income=salary+bonus-income_tax;
return real_income;};
//void Add(Teacher*);
//void Add(float);
Teacher operator+(Teacher*);
Teacher operator+(float);
void display();
public:
~Teacher(void);
};
Teacher::Teacher(char* n,char* I)
{
strcpy(name,n);
strcpy(ID,I);
}
Teacher::Teacher(char* n, char* I, float s, float b, float t)
{
strcpy(name,n);
strcpy(ID,I);
salary=s;
bonus=b;
income_tax=t;
}
void Teacher::SetIncome()
{
cout<<"Please input Teacher &quo

最大的错误就是对与“+”运算符的重载问题上,你每次都是在重载函数中,定义Teacher A; ,实际上,编译时出现错误提示:没有相应的构造函数去调用。因为你的构造函数都需要参数,一个是需要2个参数,一个需要4个参数,又没有使用默认构造函数或是为参数赋与初始的默认值,这样的话,当你只是去声明Teacher A; 时,就会没有相应的构造函数可供调用;
那么正确的方法应该是这样的,此例由于Teacher的数据成员比较多,所以构造这样一个对象不太值得,我觉得最好使用重载"+="运算符的方法:
Teacher &
Teacher::operator += (Teacher &temp)
{
salary += temp.salary;
return *this;
}
也就是说,返回的是引用,参数也是引用类型,然后return *this; 你可以仔细体会一下

我把程序改了改,你看看,不知道是不是你想实现的效果 :)
#include<iostream>
#include<string.h>
using namespace std;

class Teacher
{
char name[10];
char ID[20];
float bonus;
float income_tax;

public:
float salary;
float real_income;

Teacher (char *, char *);
Teacher (char *, char *, float, float, float);
void SetIncome ();
float cal_realincome ()
{
real_income = salary + bonus - income_tax;
return real_income;
}