Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.snto-msu.net/showflat.php?Number=8650669&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Wed Apr 13 03:27:17 2016
Кодировка: Windows-1251
[C++] Friends, forward declarations & invalid uses of incomplete types - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 1
samat
Samat

Рег.: 05.01.2008
Сообщений: 445
Из: ГЗ-Б
Рейтинг: 69
  [C++] Friends, forward declarations & invalid uses of incomplete types
      23.05.2009 01:50
 

Хочется объявить в классе А protected переменную, после чего сделав функцию из класса Б ее другом получить из этой функции доступ к той самой переменной.
Ну вроде так:
code:
class A; class B{ public: void foo(){printf("%d\n",i);}; }; class A{ protected: int i; friend void B::foo(); };

По понятным причинам сделать это не удается.
Нарыл в стауструпе 11.5.1 (280 стр. в английском 3ем специальном издании) - тепло, но не разобрался, прогу сдавать сегодня днем.
Вопрос: существует ли адекватная конструкция, позволяющая проделать вышеописанную махинацию?

l0st
ГосДеп

Рег.: 11.11.2005
Сообщений: 7673
Рейтинг: 3078
  Re: [C++] Friends, forward declarations & invalid uses of incomplete t [re: samat]
      23.05.2009 02:07
 

На мой взгляд ты не должен этого хотеть. friend нарушает инкапсуляцию.
А вообще в примере у тебя переменная принадлежит экземпляру, а не самому классу. Ты static не забыл?



коммунист
samat
Samat

Рег.: 05.01.2008
Сообщений: 445
Из: ГЗ-Б
Рейтинг: 69
  Re: [C++] Friends, forward declarations & invalid uses of incomplete t [re: l0st]
      23.05.2009 02:24
 

Согласен; у меня задание - написать прогу, в которой есть перегруженные функции-друзья.
Вот и развлекаюсь.

unkulunkulu
unkulunkulunkulu

Рег.: 12.11.2006
Сообщений: 18453
Из: 13000
Рейтинг: 11759
  Re: [C++] Friends, forward declarations & invalid uses of incomplete t [re: samat]
      23.05.2009 02:27
 

Причем тут вообще protected? friend? до описания нельзя полями пользоваться. Можно делать только некоторые вещи, к примеру объявить указатель/ссылку на A.

unkulunkulu
unkulunkulunkulu

Рег.: 12.11.2006
Сообщений: 18453
Из: 13000
Рейтинг: 11759
  Re: [C++] Friends, forward declarations & invalid uses of incomplete t [re: samat]
      23.05.2009 02:29
 

Quote:

перегруженные функции-друзья.


code:
struct A { friend void f(); friend void f(int); };
done

unkulunkulu
unkulunkulunkulu

Рег.: 12.11.2006
Сообщений: 18453
Из: 13000
Рейтинг: 11759
  Re: [C++] Friends, forward declarations & invalid uses of incomplete t [re: l0st]
      23.05.2009 02:31
 

Quote:

friend нарушает инкапсуляцию.


Это неправда.

samat
Samat

Рег.: 05.01.2008
Сообщений: 445
Из: ГЗ-Б
Рейтинг: 69
  Re: [C++] Friends, forward declarations & invalid uses of incomplete t [re: unkulunkulu]
      23.05.2009 02:31
 

ага.
Так и сделаю.

Спокойной ночи, друзья.

Druxa
Дрюха

Рег.: 27.06.2003
Сообщений: 2722
Из: Троицк
Рейтинг: 1974
  Re: [C++] Friends, forward declarations & invalid uses of incomplete t [re: unkulunkulu]
      23.05.2009 14:11
 

> struct A { friend void f(); friend void f(int); }; //done
все правильно, какие задания такие и решения :)
задание "написать программу с использованием iostream". решение
code:
#include <iostream> int main () {return 0;}

=) никогда не понимал чего преподы пытаются такими заданиями добиться...



нет, я не богат... я сказочно не богат... но я и не умен...
JUnit

Рег.: 08.03.2005
Сообщений: 3812
Из: Беляево
Рейтинг: 1621
  Re: [C++] Friends, forward declarations & invalid uses of incomplete t [re: Druxa]
      23.05.2009 15:57
-1

В main() за тебя компилятор "return 0;" допишет, зачем столько лишней ручной работы...

Yorik

Рег.: 01.09.2005
Сообщений: 2476
Из: Москва
Рейтинг: 633
  Re: [C++] Friends, forward declarations & invalid uses of incomplete t [re: JUnit]
      23.05.2009 16:06
1

вот после таких и нервничаешь, собирая 10ую библиотеку, когда она выдает кучу warning'ов

JUnit

Рег.: 08.03.2005
Сообщений: 3812
Из: Беляево
Рейтинг: 1621
  Re: [C++] Friends, forward declarations & invalid uses of incomplete t [re: Yorik]
      23.05.2009 16:11
 

Это по стандарту.

Yorik

Рег.: 01.09.2005
Сообщений: 2476
Из: Москва
Рейтинг: 633
  Re: [C++] Friends, forward declarations & invalid uses of incomplete t [re: JUnit]
      23.05.2009 16:19
 

я не про этот случай, я про "лишнюю ручную работу"

Druxa
Дрюха

Рег.: 27.06.2003
Сообщений: 2722
Из: Троицк
Рейтинг: 1974
  Re: [C++] Friends, forward declarations & invalid uses of incomplete t [re: JUnit]
      23.05.2009 18:35
 

Quote:

за тебя компилятор "return 0;" допишет



кстати в C++ да, а вот в C - нет
code:
[andrei@xoft ~]$ cat main_no_return.c int main(){} [andrei@xoft ~]$ gcc -O3 -o main_no_return main_no_return.c [andrei@xoft ~]$ ./main_no_return; echo $? 96

так что я как-то привык ему такие вещи не доверять :)



нет, я не богат... я сказочно не богат... но я и не умен...
unkulunkulu
unkulunkulunkulu

Рег.: 12.11.2006
Сообщений: 18453
Из: 13000
Рейтинг: 11759
  Re: [C++] Friends, forward declarations & invalid uses of incomplete t [re: Druxa]
      23.05.2009 21:36
 

Кстати! У меня телепат-мод проснулся! Мне кажется, что просили с дружественными перегруженными операторами, а не просто функциями сделать.

samat
Samat

Рег.: 05.01.2008
Сообщений: 445
Из: ГЗ-Б
Рейтинг: 69
  Re: [C++] Friends, forward declarations & invalid uses of incomplete t [re: unkulunkulu]
      23.05.2009 23:31
-1

Чуть-чуть не попал.
Quote:


Формальная часть задания: 1й класс - независимый, должен содержать указатель (int*, char* или другой). Класс должен быть абстрактным. Для этого класса должны быть определены: конструктор, конструктор копирования, деструктор, оператор присваивания.

2й и 3й классы - наследники 1-го класса.

Должны использоваться 4 (минимум) перегруженных функции, включая какой-либо унарный оператор и хотя бы один бинарный оператор. Некоторые из функций должны быть перегружены как члены класса, некоторые - как друзья класса.

В классах должны быть определены виртуальные функции. Они должны использоваться в программе.

В программе присутствует функция main, в которой объекты создаются и взаимодействуют. Пользователь должен иметь возможность видеть результат создания и взаимодействия объектов (информация о выполненных действиях должна печататься на экран).




Страницы: 1

Technical >> Development (Archive)

Дополнительная информация
1 зарегистрированных и 0 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в