C++ 如何定义特定于类的<&书信电报;C+中的运算符+;

C++ 如何定义特定于类的<&书信电报;C+中的运算符+;,c++,C++,给定一个类,例如: class Person { private: char *name; public: Person() { name = new char[20]; } ~Person() { delete [] name; } } 我想使用如下语句打印此实例的名称: cout << myPerson << endl; cout将此添加到类中: friend std::os

给定一个类,例如:

class Person
{
private:
    char *name;

public:
    Person()
    {
        name = new char[20];
    }
    ~Person()
    {
        delete [] name;
    }
}
我想使用如下语句打印此实例的名称:

cout << myPerson << endl;
cout将此添加到类中:

friend std::ostream& operator<< (std::ostream& out, const Person& P);
friend std::ostream&operator将其添加到类中:

friend std::ostream& operator<< (std::ostream& out, const Person& P);

friend std::ostream&operator定义一个以ostream为参数的成员函数print()。然后让重载运算符定义一个成员函数print(),该函数以ostream作为参数。那就让它过载吧operator@lupital,若你们想保持名字的私密性或不可访问性,你们需要朋友,因为我不确定ostream也可以是const。我可能在这方面错了。事实上我对此是肯定的。流操作符声明friend是一种非常常见的模式,也是一种很好的模式。通过get/set访问器以流媒体的唯一目的公开私有成员是不好的,因为它将上述访问器公开给所有人。friend streaming operator至少限制对读取和写入流的清晰上下文的访问。Oops:(很抱歉,ostream不能是const。它现在已经被修复了。@lupital,如果你想保持名字的私密性或不可访问性,你需要朋友,因为Operator我也不确定ostream是否可以是const。我可能在这一点上错了。事实上我肯定这一点。流操作符声明friend是一种非常常见的模式,也是一种很好的模式。暴露private memb通过get/set访问器访问流媒体是不好的,因为它向所有人公开了上述访问器。一个好友流媒体运营商至少限制了对流媒体读写的清晰上下文的访问。哎呀:(对不起,ostream不能是const。它现在已经修复了。@aJ:Spot on!@aJ:Spot on!
void YourClass::print(ostream& out) const
{
    //implement printing ...
}
ostream& operator<<(ostream& out, const YourClass& m)
{
    m.print(out);
    return out;
}