| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > C++ множественное наследование |
| Автор: Storm_tpv 14.12.2007, 23:59 | ||
| Здаствуйте! Я вот начал изучать тему множественного наследования. и передо мной встала задача: написать след программу. Создать иерархии наследования: удочка, телескоп – телескопическая удочка. Я почитал теории, пробовал и так и сяк, но ошибка появляется. Я не знаю как бы мне изменить другие классы от udocika_teleskop хочу передать в остальные классы данные созданные этим классом. Вот что я написал. Помогите понять или исправить ошибку.
|
| Автор: JackYF 15.12.2007, 00:13 |
Укажи её, мы не телепаты. И номер строки, на которую ругается компилятор. |
| Автор: Storm_tpv 15.12.2007, 00:17 |
| Не могли бы вы в майне создать переменную класса udocika_teleskop чтобы она могла бы вызывать оба класса. вот как здесь пример. Я не понимаю как мне это повторить: class Student{ public: int mark; ... }; class Worker{ public: int salary; }; class Practicant: public Student, public Worker{ }; void PutMark(Student& s, int mark){ s.mark = mark; } void PutSalary(Worker& w, int salary){ w. salary = salary; } void main(){ Practicant p; PutMark(p,5); PutSalary(p,200); } Мне бы только в майне, остальное я описал уже. Спасибо |
| Автор: Storm_tpv 15.12.2007, 00:36 | ||
| Правильно я сделал? У меня соменения, я не уверен, помогите пожалуйста.
|
| Автор: crazy_hand 15.12.2007, 00:40 | ||
ты в main вызываешь функцию getl класса udocika. Прототип:
а ты ей вторым параметром передаешь не int а объект класса udocika_teleskop. В этом и ошибка. А вообще приучайся писать с директивами препроцессора #ifndef,#define,#endif, а так же разделять интерфейс и реализацию, определяй сам класс в .h файлы - его методы в .cpp файле. И названия классов гораздо лучше смотрятся, если они написаны по-английски =) |
| Автор: Storm_tpv 15.12.2007, 00:53 | ||||
| Все я понял: По условию задания я правильно вызвал и определил? для класса udocika
а вот main
|
| Автор: crazy_hand 15.12.2007, 01:43 |
| ну лично мне больше нравится второй вариант твой. Но в конечном счете все определяется твоими задачами и поставленными целями. Но вообще, я бы посоветовал(как меня учили и как я стараюсь писать) писать так: в базовом классе определяется 2-а метода, один открытый, а другой защищенный(виртуальный). Открытый внутри себя вызывает защищенный. Защищео нный, если нужно, в классах-потомках переопределяется. |
| Автор: chipset 17.12.2007, 12:03 |
| А где у тебя там аналогия с Student, Worker, Practicant? Суть в эталонной задаче в правильном выборе из перегруженных функций. А в твоем коде я вообще не вижу перегруженных функций которые заточены под удочку и телескоп. Короче задача непонятна |
| Автор: regis 17.12.2007, 13:45 |
| От себя добавлю, что пример выбран какой-то неудачный. ;( (Когда применяем множественное наследование, предполагается наследование классом свойств от двух (или более) суперклассов. А удочка-телескоп, очевидно, много наследует от удочки, но как-то очень мало -- от телескопа.) |