ݺߣ

ݺߣShare a Scribd company logo
Программирование на языке C++
Лекция 5
Ключевое слово friend
Александр Смаль
1/5
Дружественные классы
struct String {
...
friend struct StringBuffer;
private:
char * data_;
size_t len_;
};
struct StringBuffer {
void append(String const& s) {
append(s.data_ );
}
void append(char const* s) {...}
...
};
2/5
Дружественные функции
Дружественные функции можно определять прямо внутри
описания класса (они становятся inline).
struct String {
...
friend std:: ostream&
operator <<(std:: ostream & os ,
String const& s)
{
return os << s.data_;
}
private:
char * data_;
size_t len_;
};
3/5
Дружественные методы
struct String;
struct StringBuffer {
void append(String const& s);
void append(char const* s) {...}
...
};
struct String {
...
friend
void StringBuffer :: append(String const& s);
};
void StringBuffer :: append(String const& s) {
append(s.data_ );
}
4/5
Отношение дружбы
Отношение дружбы можно охарактеризовать следующими
утверждениями:
∙ Отношение дружбы не симметрично.
∙ Отношение дружбы не транзитивно.
∙ Отношение наследования не задаёт отношение дружбы.
∙ Отношение дружбы сильнее, чем отношение наследования.
Вывод
Стоит избегать ключевого слова friend, так как оно нарушает
инкапсуляцию.
5/5

More Related Content

5.5 Ключевое слово friend

  • 1. Программирование на языке C++ Лекция 5 Ключевое слово friend Александр Смаль 1/5
  • 2. Дружественные классы struct String { ... friend struct StringBuffer; private: char * data_; size_t len_; }; struct StringBuffer { void append(String const& s) { append(s.data_ ); } void append(char const* s) {...} ... }; 2/5
  • 3. Дружественные функции Дружественные функции можно определять прямо внутри описания класса (они становятся inline). struct String { ... friend std:: ostream& operator <<(std:: ostream & os , String const& s) { return os << s.data_; } private: char * data_; size_t len_; }; 3/5
  • 4. Дружественные методы struct String; struct StringBuffer { void append(String const& s); void append(char const* s) {...} ... }; struct String { ... friend void StringBuffer :: append(String const& s); }; void StringBuffer :: append(String const& s) { append(s.data_ ); } 4/5
  • 5. Отношение дружбы Отношение дружбы можно охарактеризовать следующими утверждениями: ∙ Отношение дружбы не симметрично. ∙ Отношение дружбы не транзитивно. ∙ Отношение наследования не задаёт отношение дружбы. ∙ Отношение дружбы сильнее, чем отношение наследования. Вывод Стоит избегать ключевого слова friend, так как оно нарушает инкапсуляцию. 5/5