我有一个GolfCourse类标头gcourse.hh,我想为>> operator实现操作符重载。如何在文件gcourse.cc的标头之外执行此操作?也就是说,我需要指向类本身的哪个“单词”,“ GolfCourse ::”还不足以实现功能……?

gcourse.hh:
class GolfCourse {

public:
---
friend std::istream& operator>> (std::istream& in, GolfCourse& course);

gcourse.cc:
---implement operator>> here ---

最佳答案

GolfCourse::不正确,因为operator >>不是GolfCourse的成员。这是一个免费功能。您只需要写:

std::istream& operator>> (std::istream& in, GolfCourse& course)
{
   //...
   return in;
}


仅当您计划从friend访问privateprotected成员时,才需要类定义中的GolfCourse声明。您当然可以在类定义中提供实现:

class GolfCourse {
public:
    friend std::istream& operator>> (std::istream& in, GolfCourse& course)
    {
       //...
       return in;
    }
};

10-07 13:19