Обращение к дружественной функции

210
26 апреля 2017, 12:42

Можно ли вызвать friend-функцию из другой, обычной функции того же класса? Если да, то как?

Answer 1

Вот такого эксперимента достаточно?

class Secret
{
private:
    void out() const { cout << "Secret\n"; }
    friend void top(const Secret& s);
};
void top(const Secret& s)
{
    s.out();
};
class Public
{
public:
    void secret()
    {
        Secret s;
        // s.out(); Не скомпилируется!
        top(s);
    }
};
int main(int argc, const char * argv[])
{
    Public p;
    p.secret();
}

Или так (дружественная одна из функций чужого класса, недоступная извне вообще):

class Public
{
public:
    void secret();
private:
    void stop();
};
class Secret
{
private:
    void out() const { cout << "Secret\n"; }
    friend void Public::stop();
};
void Public::secret()
{
    stop();
}
void Public::stop()
{
    Secret s;
    s.out();   // Работает
}
int main(int argc, const char * argv[])
{
    Public p;
    p.secret();
}
READ ALSO
Преобразовать строку в длинное число

Преобразовать строку в длинное число

Есть вектор длины n и строка длины m, содержащая только цифрыНеобходимо в вектор записывать числа с максимум k цифрами, содержащиеся в строке,...

203
Бинарный поиск в &ldquo;массиве отрезков&rdquo;

Бинарный поиск в “массиве отрезков”

Задан упроядоченый vector из double, где каждый элемент представляет собой конец отрезкаНапример, {1,3,5,6,9} -- означает, что существуют следующие отрезки:...

231
Обращение к левому объекту в перегрузке

Обращение к левому объекту в перегрузке

Недавно начал изучать перегрузку операторовПытаюсь перегрузить оператор * как пересечение множеств, но не могу понять как в данном случае...

194
Как можно распаковать\получить инфу о файлах архива в C++?

Как можно распаковать\получить инфу о файлах архива в C++?

Архивы форматов rar,zip, необходимо: распаковывать архив, получать определенный фаил из архива, получать древо каталогов и список всех файлов...

230