Справочники C++ friend

Что такое friend в C++?

Ключевое слово friend используется для предоставления доступа приватным или защищенным членам класса другим функциям или классам. Это позволяет определенным внешним элементам обращаться к закрытым данным и методам класса. 


Объявление дружественной функции:

class MyClass {
private:
	int privateData;

	// Объявление дружественной функции
	friend void friendFunction(MyClass obj);

public:
	MyClass(int data) : privateData(data) {}

	// Доступ к privateData из других функций
	int getPrivateData() const {
		return privateData;
	}
};

// Реализация дружественной функции
void friendFunction(MyClass obj) {
	std::cout << "Accessing privateData from friend function: " << obj.privateData << std::endl;
}

В этом примере friendFunction объявлена дружественной для класса MyClass и, таким образом, имеет доступ к его приватным членам.

Использование дружественной функции:

int main() {
	MyClass obj(42);

	// Вызов дружественной функции
	friendFunction(obj);

	// Доступ к privateData через открытый метод класса
	std::cout << "Accessing privateData from public method: " << obj.getPrivateData() << std::endl;

	return 0;
}

В основной программе дружественная функция friendFunction вызывается с объектом класса MyClass, даже несмотря на то, что privateData является закрытым членом.


Дополнительные возможности:

  • Доступ к закрытым членам:friend предоставляет доступ к закрытым членам класса для определенных внешних функций или классов.
  • Контроль доступа:Использование friend позволяет гибко управлять доступом, предоставляя приватным членам доступ только для определенных функций.

Почему использовать friend:

  • friend полезен, когда нужно предоставить ограниченный доступ к закрытым членам класса без нарушения инкапсуляции.

Когда использовать friend:

  • Когда требуется предоставить доступ к приватным членам класса определенным внешним функциям или классам без изменения модификаторов доступа.


Использование friend в C++ является мощным средством, которое следует использовать осторожно, чтобы не нарушать принципы инкапсуляции и обеспечивать безопасность программы.

Комментарии
Добавить комментарий

Пока комментариев нет