Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
#1

Как грамотно реализовать доступ к классам EngWords и RusWords - C++

22.02.2014, 19:37. Просмотров 225. Ответов 7
Метки нет (Все метки)

Если у меня есть классы EngWords и RusWords,в каждом определены методы ввода строк.
И задание сложить, сравнить эти строки, то я должен создавать дружественные функции или вообще отдельный класс, чтоб имел доступ к объектам и класса EngWords и соответсвенно RusWords?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2014, 19:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как грамотно реализовать доступ к классам EngWords и RusWords (C++):

Необходимо реализовать шаблонный класс Array, и грамотно реализовать push_back - C++
Необходимо реализовать шаблонный класс Array, параметризируемый типом хранимых элементов. Класс Array представляет собой...

Как разделить код по классам? - C++
Программа имеет слишком долгий код, можно его его как-то разбить на части по тематике, например, и покидать его в другие файлы(.срр), а...

Как грамотно прорефакторить? - C++
У нас основное тело программы вынесено в класс, назовем его условно class MainProgram, в нем масса методов. Один из методов (назовем его...

Как грамотно составить агроритм? - C++
После получения определённых знаний в области с++ пришёл к выводу, что нехватает чего-то для успешного составления алгоритмов для...

Как грамотно организовать код? - C++
У меня есть программа, уже написанная, но я хочу всё переделать более грамотно. Как разбить программу на классы правильно с точки зрения...

Как грамотно описать следующие команды - C++
Как правильно и грамотно описать в курсовой работе следующий код, который преобразует вещественное число для его представления в формате...

7
zss
Модератор
Эксперт С++
6475 / 6038 / 1980
Регистрация: 18.12.2011
Сообщений: 15,637
Завершенные тесты: 1
22.02.2014, 19:45 #2
1. Использовать дружественную функцию
C++
1
bool Equal(const EngWords&,const RusWords&);
2. Если у классов есть функции, возвращающие значение строки,
то функция не обязана быть дружественной,
просто сравнивайте возвращенные значения.
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
22.02.2014, 19:50  [ТС] #3
ну я еще не упомянул, что это производный классы, дружественную я для них в базовом долзжен описать?
0
zss
Модератор
Эксперт С++
6475 / 6038 / 1980
Регистрация: 18.12.2011
Сообщений: 15,637
Завершенные тесты: 1
22.02.2014, 20:39 #4
Дружественность не наследуется.
Объявляете ее во всех классах.
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
22.02.2014, 20:41  [ТС] #5
почему когда обяъявляю в файле .h friend void Compare(...) все нормально, а когда описываю ее уже в .cpp подчеркивает и говорит, что имя Compare не явл-ся членом класса...и friend в .cpp не дает написать...
0
zss
Модератор
Эксперт С++
6475 / 6038 / 1980
Регистрация: 18.12.2011
Сообщений: 15,637
Завершенные тесты: 1
22.02.2014, 20:49 #6
Слово friend пишется только при объявлении внутри класса:
C++
1
2
3
4
5
6
7
class A
{
int n;
public:
friend int f(const A&);
};
int f(const A& a){return a.n;}
0
RayPas
2 / 0 / 0
Регистрация: 18.01.2013
Сообщений: 370
22.02.2014, 21:00  [ТС] #7
ну вот если я в .h объявляю там почему даже cout не читает( а оно мне в теле этой функции нужно), а вот при описании ее в .cpp пишет что эта функция не член класса. в файле .h же только прототип должен быть
0
zss
Модератор
Эксперт С++
6475 / 6038 / 1980
Регистрация: 18.12.2011
Сообщений: 15,637
Завершенные тесты: 1
22.02.2014, 21:46 #8
Тогда В h файле должны идти сначала предварительные объявления класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class  EngWords;
class  RusWords;
bool Equal(const EngWords&,const RusWords&);
class  EngWords
{
....
friend bool Equal(const EngWords&,const RusWords&);
};
class  RusWords
{
....
friend bool Equal(const EngWords&,const RusWords&);
};
0
22.02.2014, 21:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2014, 21:46
Привет! Вот еще темы с ответами:

объясните грамотно как это работает - C++
1)int * arr = NULL; и int * arr = new int;(что означает new) 2)можно менять int * arr = NULL на int * arr = {0} или int * arr = 0

MinGW+MSYS - как грамотно пользоваться? - C++
Вопрос: Добрый день, уважаемые форумчане! У меня такой вопрос: Пытаюсь собрать PostgreSQL под Windows, используя связку...

Как грамотно подключать заголовочные файлы? - C++
Как грамотно подключать заголовочные файлы? Можно ли их все собрать в stdafx.h а потом инклюдить там где они мне нужны? А то сейчас...

Как грамотно удалить элементы в векторе? - C++
for (vector<fileResult>::iterator p = listExp.begin(); p != listExp.end();p++) { if (p->select) listExp.erase(p); } делаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru