Функции или члены, объявленные в спецификаторе закрытого доступа, не будут доступны вне функций-членов класса.
В C ++ есть 3 спецификатора доступа для класса / структуры / объединения. Эти спецификаторы доступа определяют, как получить доступ к членам класса. Конечно, любой член класса доступен в этом классе (внутри любой функции-члена этого же класса). Продвигаясь к типу спецификаторов доступа, они:
Public - Члены, объявленные как Public, доступны извне класса через объект класса.
Защищено - Члены, объявленные как Защищенные, доступны извне класса, НО только в классе, производном от него.
Частный - Эти члены доступны только из класса. Доступ снаружи запрещен.
Друзья на помощь!
Объявление функции как friend внутри другого класса позволяет этой функции получать доступ ко всем функциям-членам внутри класса независимо от правил спецификатора доступа. друг Это способ обойти правила спецификатора доступа, изложенные в C ++. Аналогично, класс, объявленный как друг внутри другого класса, позволит классу, объявленному как друг, иметь доступ ко всем членам класса. Обратите внимание, что объявление друга может быть дано под любым спецификатором доступа, и оно будет иметь тот же эффект.
Пример исходного кода:
class MyClass
{
public:
int a;
protected:
int b;
private:
int c;
friend void doSomething(MyClass obj);
};
void doSomething(MyClass obj)
{
obj.a = 10; //Allowed
obj.b = 20; //Allowed,
obj.c = 30; //Allowed,
}
int main()
{
MyClass obj;
obj.a = 10; //Allowed
obj.b = 20; //Not Allowed, gives compiler error
obj.c = 30; //Not Allowed, gives compiler error
}
Таким образом, если вы используете friend
, то вы можете иметь доступ к закрытым членам класса, иначе ваш компилятор будет глючить, вам следует подумать об его изменении!