在C++中重新定义operator <<

use*_*091 0 c++ operator-overloading redefine

我知道这个问题可能是愚蠢的,但我是C++的新手,我对操作数的重新定义有很多问题.我想要做的是重新定义操作数<<打印我的类"人"信息,但它似乎编译错误:

class Person {
private:
     string name;
     unsigned long personId;
     string address;
public:
    Person(string name2,unsigned long id,string adr) {
    name = name2;
    personId = id;
    address = adr;
}
void operator<<(Person person) {
     cout<<"Name: "<<person.name<<"  Person ID:  "<<person.personId<<"  Person address:  "<<person.address<<endl;
 }
}

int _tmain(int argc, _TCHAR* argv[])
{
     Person person("Steven",1212121212,"USA");
     cout<<person; //compiling error here

     return 0;
}
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?

For*_*veR 6

operator <<是二元运算符,所以,它的第一个参数应该是std::ostream你的情况下对象的引用.由于您的变量是私有的 - 您不能operator <<作为自由函数重载.类函数的第一个参数是指向此类对象的指针,因此您应该friend在函数上使用特定程序(授予对类的私有变量的访问权限).

friend ostream& operator << (ostream& os, const Person& person)
{
   os << "Name: "<< person.name << "  Person ID:  "
      << person.personId << "  Person address:  " << person.address << endl;
   return os;
}
Run Code Online (Sandbox Code Playgroud)