首页 > 解决方案 > 朋友在 C++ 中不显示为公开

问题描述

我和一个在公共部分声明的朋友一起写了一个类:

class Graph {
    // ... snip ...

public:
    Graph()= default;
    friend Graph operator+ (const Graph &g1, const Graph &g2);
};

但是当我在 main.cpp 中编写以下内容时:

Graph g{};
g.

我的 IDE 没有显示operator+为可能的完成。

到底是operator+不是公开的?这是怎么回事?

标签: c++classprivatepublic

解决方案


g.将使您的 IDE 显示Graph成员函数。

这是一个免费(非会员)功能:

friend Graph operator+ (const Graph &g1, const Graph &g2);

如果您添加一个成员函数,如下operator+=所示,可能会出现:

class Graph {
private:
    // ... snip ...

public:
    Graph() = default;
    Graph& operator+=(const Graph& rhs);                      // this may show up
    friend Graph operator+(const Graph &g1, const Graph &g2);
};

Graph& Graph::operator+=(const Graph& rhs) {
   // ... impl ...
   return *this;
}

Graph operator+(const Graph &g1, const Graph &g2) {
    Graph retval(g1);
    return retval += g2;
}

注意:通过像上面一样使用operator+=内部的成员函数operator+,free 函数将不再需要是 a friend


推荐阅读