|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
31.10.2009, 01:20 | #1 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Классы(абстрактный и наследование)
вот пытался поработать с классами:
Код:
Код:
E:\Program Files\Microsoft Visual Studio\MyProjects\C1\C1.cpp(167) : error Цитата:
как же верно? Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 31.10.2009 в 01:32. |
|
31.10.2009, 01:50 | #2 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Насчёт volatile, вероятно Вы имели ввиду virtual? )
Ещё что заметил - конструктор fileStream принимает два параметра char* в описании, а вызываете с одним. Плюс в кавычках, чтобы отобразить символ '\' нужно писать так '\\' "C:\\AddNode.pas", так как \ означает escape-последовательность в C/C++ По поводу ошибки - используйте приведение, или объявите наследование как public В теме написано про абстрактные классы, но не увидел у Вас их здесь = ) Но в принципе, определяются они так: Код:
Последний раз редактировалось netrino; 31.10.2009 в 01:57. Причина: дополнил ответ ) |
31.10.2009, 21:41 | #3 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
исправил как вы сказали...
ошибок стало только больше Цитата:
Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
31.10.2009, 22:35 | #4 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Компилятор говорит, что не может создать объект абстрактного класса )
Дело в том, что в производном классе необходимо описать реализацию всех методов абстрактного класса, при этом следует учесть, что разные типы параметров порождают разные перегруженные функции. Что и происходит в Вашем случае: класс stream имеет методы read и write первым параметром в которых есть тип void*, в то время, как наследуемый класс fileStream имеет методы с этими же именами, но с параметром типа char*. Приведите к единому виду и тогда будет компилироваться. Ещё одно, метод copyFrom у Вас объявлен и реализован в абстрактном, нет необходимости его ещё раз объявлять в производном классе, только если Вы не собираетесь придать ему иной функционал, но в таком случае в базовом классе лучше объявить этот метод как виртуальный ... И кстати, если используются виртуальные функции, то деструктор лучше всего также объявить как виртуальный, даже если он будет пустой Последний раз редактировалось netrino; 31.10.2009 в 22:40. |
01.11.2009, 23:44 | #5 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
осталась две ошибки... Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
02.11.2009, 01:13 | #6 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Вот в таком виде у меня скомпилировалось )
Код:
|
02.11.2009, 01:18 | #7 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
УРА=)
спасибо=))) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Наследование на C++ | dziga1989 | Помощь студентам | 5 | 22.10.2009 11:25 |
Классы и наследование. | Scratch | Общие вопросы C/C++ | 9 | 27.09.2008 16:03 |
Наследование: абстрактный класс | zak | Общие вопросы C/C++ | 4 | 22.12.2007 13:49 |