首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于C++ 赋值运算符重载为成员函数的有关问题,初学者

2013-12-22 
关于C++ 赋值运算符重载为成员函数的问题,菜鸟求助~我把 重载为Teacher类的成员函数,希望实现的功能是将

关于C++ 赋值运算符重载为成员函数的问题,菜鸟求助~
我把 = 重载为Teacher类的成员函数,希望实现的功能是将Student类的对象中的数据成员的值赋给Teacher类的对象(假设这个学生当上老师了,呵呵)  我已经在Student类中将&teacher Teacher::operator =(Student&)声明为友元函数了,可为什么编译的时候还是提示我,不能访问Teacher中的数据成员?请问这是什么原因呢


#include<iostream>
#include<string>
using namespace std;

class Teacher;

class Student
{
public:
Student();
Student(string n,int a,int nb,char sx):name(n),age(a),number(nb),sex(sx){}
friend ostream& operator << (ostream&,Student&);
friend Teacher& Teacher::operator =(Student &);
private:
string name;
int age;
int number;
char sex;
};

ostream& operator <<(ostream& output,Student& s)
{
cout<<"Student name :"<<s.name<<endl<<"age :"<<s.age<<endl<<"number :"<<s.number<<endl<<"sex :"<<s.sex<<endl;
return output;
}



class Teacher
{
public:
 friend ostream & operator <<(ostream&,Teacher&);
 Teacher &  operator =(Student &);
private:
string name;
char sex;
int age;
int number;
};

ostream& operator <<(ostream& output,Teacher& t)
{
cout<<"Teacher name :"<<t.name<<endl<<"age :"<<t.age<<endl<<"number :"<<t.number<<endl<<"sex :"<<t.sex<<endl;
return output;
}

Teacher&  Teacher::operator = (Student & s)
{
     name=s.name;
 age=s.age;
 sex=s.sex

}

int main()
{
Student st1("Jack",22,001,'M'),st2("Mary",21,002,'F');
Teacher tc1,tc2;
tc1=st1;
tc2=st2;
cout<<st1<<st2<<tc1<<tc2<<endl;
return 0;
}
[解决办法]
找不到Teacher& Teacher::operator =(Student &)的声明;
把Teacher类的声明放到Student类声明的前面。然后在前面再加一句 class Student;
[解决办法]
不是不可以访问,是声明顺序不对,在Student里找不到Teacher::operator=()的声明, 需要把class Teacher的声明放在Student的前面

热点排行