2014-09-21 2 views
0

Например, этот класс. Есть ли способ, чтобы функция, не являющаяся членом, выполняла задачу функции друга?Как функция, не являющаяся членом, может выполнять функцию друга класса?

class Accumulator 
{ 
    private: 
     int m_nValue; 
    public: 
     Accumulator() { m_nValue = 0; } 
     void Add(int nValue) { m_nValue += nValue; } 

     // Make the Reset() function a friend of this class 
     friend void Reset(Accumulator &cAccumulator); 
}; 

// Reset() is now a friend of the Accumulator class 
void Reset(Accumulator &cAccumulator) 
{ 
    // And can access the private data of Accumulator objects 
    cAccumulator.m_nValue = 0; 
} 
+5

Друзей по определению являются не являющимися членами ... –

+0

идеи частного что non member non friend не может получить к нему доступ. – Dani

ответ

1

Функция, не являющаяся членом, не являющейся другом, не может осуществлять доступ к частным данным или изменять их. Есть ли причина, по которой вы не хотите предоставлять функцию-член void Reset() {m_nValue = 0;} в общедоступный интерфейс класса?

4

О, это звучит как домашнее задание: надуманный вопрос с ответом, который вы должны знать, чтобы задать вопрос.

Во-первых, обратите внимание, что функция friend не является членом, так как она ’ s не является членом.

Во всяком случае,

void Reset(Accumulator& a) 
{ 
    a = Accumulator(); 
} 
0

Если вы имеете в виду доступ к закрытым членам класса, что не может быть сделано. Если вы хотите функцию без друга, не являющийся членом, который делает то же самое Reset делает в данном конкретном случае, это должно работать:

void notFriendReset(Accmulator& acc) 
{ 
    acc = Accmulator(); 
} 
Смежные вопросы