#c #class #private #public
#c #класс #Частное #общедоступные
Вопрос:
Я написал класс с другом, объявленным в разделе public:
class Graph {
// ... snip ...
public:
Graph()= default;
friend Graph operator (const Graph amp;&1, const Graph amp;&2);
};
Но когда я пишу следующее в main.cpp:
Graph &{};
&.
моя среда разработки не отображается operator
как возможное завершение.
В конце концов, operator
это не общедоступно? Что происходит?
Комментарии:
1. почему понижающий голос?
2. Я полагаю, из-за почти полного отсутствия деталей.
3. Ваша проблема невоспроизводима. Сформулируйте вопрос правильно. Например. какое всплывающее окно? В C нет всплывающих окон.
4. Вы, по крайней мере, опубликовали класс с тех пор, как я сделал приведенный выше комментарий. Теперь вы могли бы добавить, какую IDE вы используете.
5. Я думаю, что здесь скрыт законный вопрос C — он сформулирован только в терминах неназванной IDE
Ответ №1:
&.
это позволило бы вашей IDE отображать Graph
функции-члены.
Это бесплатная функция (не являющаяся членом):
friend Graph operator (const Graph amp;&1, const Graph amp;&2);
Если вы добавите функцию-член, как operator =
показано ниже, это, возможно, отобразится:
class Graph {
private:
// ... snip ...
public:
Graph() = default;
Graphamp; operator =(const Graphamp; rhs); // this may show up
friend Graph operator (const Graph amp;&1, const Graph amp;&2);
};
Graphamp; Graph::operator =(const Graphamp; rhs) {
// ... impl ...
return *this;
}
Graph operator (const Graph amp;&1, const Graph amp;&2) {
Graph retval(&1);
return retval = &2;
}
Примечание: При использовании функции-члена operator =
изнутри operator
, как указано выше, свободной функции больше не нужно будет быть friend
.