Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/34: Рейтинг темы: голосов - 34, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.11.2010
Сообщений: 41
1

Классы. неоднозначный уровень доступа

10.11.2010, 00:55. Показов 6377. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кароче, трабла такая, имеется базовый класс, от него два производных, от этих двух имеется еще один производный. для наглядности диаграмма классов.
Трабла нелепа, но и не понятна. При перегрузке оператора вывода(<<) выскакивает "неоднозначный уровень доступа" к данным первого САМОГО базового класса. Как же все-таки толково правильно сделать эту перегрузку не используя воидовский вывод того класса в перегрузке?

C++
1
2
3
4
5
6
7
8
9
10
ostream &operator<<(ostream& zout,const saller& KK)
{
    zout<<KK.name<<"\t"<<KK.surname<<"\t"<<KK.patronymic<<"\t"<<KK.year<<"\t"<<KK.license_number<<"\t"<<KK.adress<<"\t"<<KK.passport_number<<endl;
    for(int i=0;i<20;i++)
    zout<<KK.departations[i][0].land<<"\t"<<KK.departations[i][0].year<<"\t"<<KK.departations[i][1].land<<"\t"<<KK.departations[i][1].year<<endl;
    zout<<KK.tov<<"\t"<<KK.adress[0];
    for(int i=1;i<5;i++)
    zout<<KK.adress[i];
    return zout;
}
Миниатюры
Классы. неоднозначный уровень доступа  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.11.2010, 00:55
Ответы с готовыми решениями:

неоднозначный уровень доступа, идентификатор не найден
Hi people! Задание: 1) Необходимо построить иерархию классов согласно схеме наследования,...

Уровень доступа
Приветствую всех! Задача такая: пользователь авторизуется на главной странице. Всего существует три...

Уровень доступа
Какой по умолчанию стоит доступ(если ничего не писать) PUBLIC ИЛИ PRIVATE?

Уровень доступа к полям
Есть базовый класс: namespace Diplom { class BaseElement : NameIdObject { ...

15
Эксперт С++
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
10.11.2010, 09:21 2
Цитата Сообщение от TranE91 Посмотреть сообщение
Как же все-таки толково правильно сделать эту перегрузку не используя воидовский вывод того класса в перегрузке?
Толковое решение заключается в том, чтобы избавится от ромбовидного наследования.
0
0 / 0 / 0
Регистрация: 10.11.2010
Сообщений: 41
10.11.2010, 09:44  [ТС] 3
в том то и фишка, что именно такое наследование и нужно.
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
10.11.2010, 14:27 4
TranE91, вряд ли. Скорее всего плохо продумана архитектура. Архитектура приложения не должна учитывать фишки языка, на котором она будет реализована. На Java или C# вы не сможете ее реализовать, т.к. там отсутствует множественное наследование, но на С++ оно разрешено. Поэтому пересматривайте архитектуру приложения
0
0 / 0 / 0
Регистрация: 10.11.2010
Сообщений: 41
10.11.2010, 14:31  [ТС] 5
эммм........ загвоздка в том, что главным условием этой лабы является такая структура распределения классов. Поинтересовался сегодня у преподши, она сказала, что в производных классах следует использовать виртуальное наследование, т.е. Базовый класс A, следующие производные B,C, и последний производный D,
C++
1
2
3
4
class B: virtual public A
{
/*...*/
}
Честно говоря не верится в действие, но попробовать следует.
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
10.11.2010, 14:39 6
TranE91, ну что я могу сказать, если вы за лабу получите неуд, можете не расстраиваться, вы знаете программирование на уровне вашего преподавателя, а может и лучше, потому что ваш преподаватель программирования не знает
0
0 / 0 / 0
Регистрация: 10.11.2010
Сообщений: 41
10.11.2010, 14:40  [ТС] 7
Да не в этом дело, просто самому интересно. Как препода цензура, меня учить не нужно. Просто интерсно что за трабла, если говорят, что решаема.
 Комментарий модератора 
Перечитайте правила и следите за речью
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
10.11.2010, 14:47 8
TranE91, а никто не говорил, что она не решаема, просто такие вещи в реальных проектах не используются, поскольку это фишка только С++, просто относительно принципов ООП эта задача и ее решение является не корректной.
0
0 / 0 / 0
Регистрация: 10.11.2010
Сообщений: 41
10.11.2010, 15:24  [ТС] 9
но оно есть)
к сожалению только одна зацепка, виртуальность..... Придется сотворить быдлокод.

Добавлено через 34 минуты
Да, все-таки трабла была в виртуальности. Если кому интересно. Исходник программы могу куда-нибудь залить.
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
10.11.2010, 16:52 10
TranE91, можете выложить на форум, заключив его в теги [CPP][/CPP]
0
33 / 33 / 2
Регистрация: 24.09.2010
Сообщений: 140
10.11.2010, 18:56 11
Цитата Сообщение от TranE91 Посмотреть сообщение
Да, все-таки трабла была в виртуальности. Если кому интересно. Исходник программы могу куда-нибудь залить.
Интересно, выложи куда нибудь.
0
0 / 0 / 0
Регистрация: 10.11.2010
Сообщений: 41
13.11.2010, 14:59  [ТС] 12
Сорри что так поздно, бухал. Сейчас залью.

Добавлено через 10 минут
тут весь проект. Сразу залазить в ашник SALLER. Вообщем то вся фишка в том вышла:

C++
1
2
3
4
5
6
7
8
9
/*
          A
B                C
          D
 */
class D:virtual public A(....),virtual public B(....),virtual public C(....)
{
тратата
}
Теперь второй вопрос, как избавиться от прямого наследования на класс А?
Вложения
Тип файла: rar new_4_lab.rar (222 байт, 19 просмотров)
0
33 / 33 / 2
Регистрация: 24.09.2010
Сообщений: 140
13.11.2010, 15:15 13
Цитата Сообщение от TranE91 Посмотреть сообщение
new_4_lab.rar (222 байт, 0 просмотров)
Архив маленький и не открывается.
0
0 / 0 / 0
Регистрация: 10.11.2010
Сообщений: 41
13.11.2010, 15:24  [ТС] 14
перезалил
Вложения
Тип файла: rar new_4_lab.rar (2.40 Мб, 23 просмотров)
0
0 / 0 / 0
Регистрация: 10.11.2010
Сообщений: 41
13.11.2010, 15:25  [ТС] 15
эммммм........ кажется сам отвечаю на свой вопрос. Походу виртуальное наследование нужно и в двух производных(В и С) использовать. А может стоит почитать методичку или Дейтела?
0
0 / 0 / 0
Регистрация: 01.02.2019
Сообщений: 36
14.03.2019, 07:07 16
это не нужно.
class D:virtual public A(....),virtual public B(....),virtual public C(....)
это влияет только на производные классы от D.
0
14.03.2019, 07:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.03.2019, 07:07
Помогаю со студенческими работами здесь

Как назначить уровень доступа?
Помогите кто нибудь, как сделать такое(если эот вообще возможно): Нужно что бы в админку на джумла...

Права доступа, уровень абстракции
Использую Asp.net 4, в качестве провайдера доступа использую пока свой, похожий на membership. В...

Уровень доступа к базу данных
вот код логики studDataContext db = new studDataContext(); klient tebl = new...

RegistryKey, Registry.LocalMachine - Уровень доступа
Доброго времени суток. Пытаюсь прописать ключи в реестр (LocalMachine) и постоянно подчеркивает...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru