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

Интерфейсы и наследования - C++

Восстановить пароль Регистрация
 
 
Andreyasu
2 / 2 / 0
Регистрация: 02.07.2009
Сообщений: 52
18.05.2013, 20:33     Интерфейсы и наследования #1
Есть вот такая структура
C++
1
2
3
4
5
6
7
8
9
10
class Base
{
public:
virtual  void SomeBaseFun()=0;
}
class Object1: public Base
{
public:
virtual void SomeObject1Fun()=0;
}
это сам интерфейс , дальше идет реализация интерфейса
C++
1
2
3
4
5
6
7
8
9
10
class _Base: public Base
{
public:
void SomeBaseFun() {return 1;}
}
class _Object1: public Object1, public _Base
{
public:
void SomeObject1Fun()  {return 2;}
}
так вот
C++
1
Object1 *a=new _Object1;
ошибка так как _Object1 абстрактный метод SomeBaseFun()=0;
Вот теперь сама задача , класс Object1 который абстрактный ничего не должен знать о не абстрактных классах
то есть его нельзя наследовать от _Base, более того класс Base и _Base всегда один а вот классов Object десятки Object1 Object2 Object3- ObjectN , тесть писать class _Base: public Base, public Object1 нельзя , как заставить работать
C++
1
Object1 *a=new _Object1;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2013, 20:33     Интерфейсы и наследования
Посмотрите здесь:

C++ наследования
C++ Свойства наследования
Наследования C++
C++ интерфейсы в с ++
Интерфейсы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
18.05.2013, 21:57     Интерфейсы и наследования #21
Andreyasu, А как из вне ты выставишь через виртуальный класс? Просто переопредели этот метод для нужных классво и все, либо поставь просто виртуальную функцию пустую, чтобы вызывать можно было и все.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andreyasu
2 / 2 / 0
Регистрация: 02.07.2009
Сообщений: 52
18.05.2013, 21:58  [ТС]     Интерфейсы и наследования #22
Цитата Сообщение от ninja2 Посмотреть сообщение
Andreyasu, А как из вне ты выставишь через виртуальный класс? Просто переопредели этот метод для нужных классво и все, либо поставь просто виртуальную функцию пустую, чтобы вызывать можно было и все.

Добавлено через 1 минуту
Andreyasu, В одном классе пытайся все делать. Я так делаю в основном делаю и норм.
Классов object могут быть десятки и у них одна большая база (набор методов) , глупо их писать каждый раз .
Код работает SetError выставляет более того GetIntError() работает правильно! Но вот именно GetTextError() возращает путсоту
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
18.05.2013, 22:03     Интерфейсы и наследования #23
Andreyasu, Я сам в проектировании не силен. Просто лишних классов не создавать.

Наверно Object1 и Ojject2 это лишние классы.

Цитата Сообщение от Andreyasu Посмотреть сообщение
Классов object могут быть десятки и у них одна большая база (набор методов) , глупо их писать каждый раз .
Код работает SetError выставляет более того GetIntError() работает правильно! Но вот именно GetTextError() возращает путсоту
Нет ну возможно ты и правильно спроектировал, тут как говорится: "кто как хочет так и дрочит". Ну читать сходу код не сильно легко. Пойдет лишь бы работал правильно и тебе понятно было.
Andreyasu
2 / 2 / 0
Регистрация: 02.07.2009
Сообщений: 52
18.05.2013, 22:05  [ТС]     Интерфейсы и наследования #24
Цитата Сообщение от ninja2 Посмотреть сообщение
Andreyasu, Я сам в проектировании не силен. Просто лишних классов не создавать.

Наверно Object1 и Ojject2 это лишние классы.
У тя есть библиотека Животные , ты предлогаешь одни классом описать котов собак и верблюдов?
И при то что все одинаково ходят по большому ,или писают тоже одинаково (ну допустим) для каждого из сотни животных отдельно прописовать метод void пописать() или лучше вынести это в базис?
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
18.05.2013, 22:09     Интерфейсы и наследования #25
Andreyasu, Нут тут нужно наследование применять, выделить общий класс Животные, в нем собрать общие свойства и методы, а от него наследовать остальных животных.

Andreyasu, Просто мелкие проги бывают там на 500 строк или там на 1к. смысла нету разбивать, ну и дело вкуса наверно, а может и опытности.
Andreyasu
2 / 2 / 0
Регистрация: 02.07.2009
Сообщений: 52
18.05.2013, 22:11  [ТС]     Интерфейсы и наследования #26
Цитата Сообщение от ninja2 Посмотреть сообщение
Andreyasu, Нут тут нужно наследование применять, выделить общий класс Животные, в нем собрать общие свойства и методы, а от него наследовать остальных животных.

Andreyasu, Просто мелкие проги бывают там на 500 строк или там на 1к. смысла нету разбивать, ну и дело вкуса наверно, а может и опытности.
Вот GObject и есть тот самый класс Животные
Тут почти 15000 строк, без четкого структурирования все бы было провалено)
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
18.05.2013, 22:13     Интерфейсы и наследования #27
Да у тебя еще Object1 и Object2 чисто виртуальные классы пустые, толку то от них?

Цитата Сообщение от Andreyasu Посмотреть сообщение
Тут почти 15000 строк
Да это дофигища, я таких исходников и не видел.
Andreyasu
2 / 2 / 0
Регистрация: 02.07.2009
Сообщений: 52
18.05.2013, 22:15  [ТС]     Интерфейсы и наследования #28
Цитата Сообщение от ninja2 Посмотреть сообщение
Да у тебя еще Object1 и Object2 чисто виртуальные классы пустые, толку то от них?
Это внешний H файл поставляемый вместе с DLL а реализация внутри , это концепция проектирования DLL есть такая , когда на конченому программисту даются только интерфейсы работы с классами а не сами классы
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2013, 22:19     Интерфейсы и наследования
Еще ссылки по теме:

C++ Организация наследования
C++ Наследования
чем отличаются структуры для наследования интерфейса, от структур, для наследования реализаций C++

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

Или воспользуйтесь поиском по форуму:
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
18.05.2013, 22:19     Интерфейсы и наследования #29
Andreyasu, Ну примерно ясно. Там можно все что угодно дальше добавить от них, если это громадная программа. Object3 например может быть применимо двойное наследование и от него другой какой нить класс будет идти, и вызов будет уже совсем других методов. Можно все что угодно придумать.
Yandex
Объявления
18.05.2013, 22:19     Интерфейсы и наследования
Ответ Создать тему
Опции темы

Текущее время: 02:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru