| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Наследование и друзья - cannot access |
| Автор: bel_nikita 16.12.2005, 01:28 | ||
| Конструкторы, деструкторы и др. пропускаю, да бы не отвлекать внимания. Абстрактный класс cPCIDSPCard объявлен, как друг для абстрактного класса cPCIDSP (такое допустимо?) Класс cPTMCD6 : public cPCIDSPCard вызывает метод ISR() класса cDSP6415 : public cPCIDSP
Метод cPCIDSP::virtual int ISR() = 0; делать public'ом нельзя. Сделать другом cPTMCD6 не очень |
| Автор: chipset 16.12.2005, 01:33 | ||
Ну вроде как в этом и суть -- кому нужно, тех и сделаешь друзьями. |
| Автор: bel_nikita 16.12.2005, 01:44 |
| Я в тупик попал с этим проектированием Есть некая PCI плата. На этой плате есть несколько DSP. Я разбиваю на классы: создаю абстракцию для DSP и абстракцию платы. Потом конкретизирую для типа DSP и платы. По приходу интерапта, драйвер берет метод ПЛАТА::ISR() платы. В свою очередь этот ПЛАТА::ISR() должен вызвать ISR() каждого DSP на плате. |
| Автор: Mayk 16.12.2005, 12:19 | ||||
Вообще-то эта строка не нужна для объявления дружбы. А так - сделай сделай в базовом DSP классе виртуальным метод ISR и объяви там же дружбу базовой схеме. Что-то типа того
|
| Автор: bel_nikita 16.12.2005, 13:21 | ||
Так я же так и сделал, но у меня не идет З.Ы.: MSVC6 |
| Автор: Mayk 16.12.2005, 13:35 | ||||
Нет. Ты вызываешь ф-цию из наследуемого класса, а не из базового. А дружба в с++ не наследуется.
|
| Автор: Earnest 16.12.2005, 18:25 | ||
| Правильно Mayk советует. Дружбу надо локализовать в базовых классах. Только чтобы было погибче, сделай в своем cPCIDSPCard защищенный хелпер (только для наследников):
Тогда потомки cPCIDSPCard смогут реализовывать любые схемы опроса потомков cPCIDSP |