Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Перегрузка


Автор: FTK 29.6.2005, 15:52
Привет!
Сейчас пытаюсь написать простенькую прогу, и в процессе возник такой вопрос:
Можно ли вместо
Код

class A 
{...
friend ostream& operator<<(ostream &, const A&)
...};

Сделать не friend - функцию, а обычную.
Да, и еще: что лучше использовать конструктор копирования или операцию присваивания?
Заранее спасибо за ответы =)

Автор: Дрон 29.6.2005, 15:54
Цитата(FTK @ 29.6.2005, 16:52)
что лучше использовать конструктор копирования или операцию присваивания?

И то, и то. Это разные методы, применяющиеся в разных ситуациях.

Цитата(FTK @ 29.6.2005, 16:52)
Сделать не friend - функцию, а обычную.

Не знаю, наверно можно. А самому сложно проверить? smile

Автор: FTK 29.6.2005, 16:06
Дрон
У меня компилятор накрылся, что-то не работает, поэтому я так, абстрактно пытаюсь придумать...

Автор: Earnest 29.6.2005, 16:23
Если в классе A достаточно открытого интерфейса для вывода в поток, то можно обойтись без friend, иначе - нельзя.

Автор: FTK 29.6.2005, 16:27
А...
А что значит
Цитата
достаточно открытого интерфейса для вывода в поток
???

Автор: Earnest 29.6.2005, 16:38
Открытый - значит public.
Например:

Код

class A
{
public:
   int GetXXX() const { return m_xxx; }
private:
   int m_xxx;
};


Тогда функция
Код

ostream& operator<<(ostream &, const A&)

вполне может вывести значение переменной m_xxx в поток и не будучи friend. А если нет такой функции GetXXX и переменная m_xxx не public, то для вывода ее значения придется оператор << объявлять как friend.

Автор: ManiaK 29.6.2005, 16:49
Цитата(Earnest @ 29.6.2005, 17:38)
А если нет такой функции GetXXX и переменная m_xxx не public, то для вывода ее значения придется оператор << объявлять как friend.

...потому как нам не дадут этот самый m_xxx - доступа нет! Friend для того и нужен - позволяет работать с private/protected методами и переменными класса.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)