Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Центр помощи > [C++] классы, приведение от родителя к наследнику |
Автор: Игорек 4.1.2011, 18:29 |
примерно так выглядит задание реализовать иерархию классов, изменяя отдельные методы и добавляя члены-данные (по усмотрению студента и преподавателя). В иерархию должно входить 2-3 производных класса. Несколько методов (по смыслу) должны быть виртуальными. Реализовать класс – двунаправленный список объектов классов наследников. Изменить демонстрационную программу так, чтобы она демонстрировала полиморфическое поведение классов. Исследовать, как реализуется механизм полиморфизма. в общем как я понял от класса родителя порождаем 2х наследников и создаём двунаправленный список который может содержать как одного так и другого наследника вот часть моего творения остальное думаю значения не имеет....... class Time1 { int day; int hour; int min; int sec; public: char * month; static int count; Time1(){ month = NULL; day=0; hour=0; min=0; sec=0; } //пустой конструктор Time1(char *mon,int d,int h,int m,int s){ month = new char [strlen(mon)+1]; strcpy(month,mon); day=d;hour=h;min=m;sec=s;Time::count++; } //конструктор с параметрами Time1(Time1 & a){ month = new char [strlen(a.month)+1]; strcpy(month,a.month); day=a.day; hour=a.hour; min=a.min; sec=a.sec; count++; } //конструктор копирования virtual void Print(){ cout<<"Месяц:"<<month<<"\n"<<"День:"<<day<<"\n"<<"час:"<<hour<<"\n"<<"минута:"<<min<<"\n"<<"секунда:"<<sec<<"\n"<<"count ="<<Time::count<<endl; } virtual ~Time1(){} //деструктор friend class Str; friend class Sob; }; class Str: public Time1{ char str[100]; public: Str():Time1(){} Str(char *mon,int d,int h,int m,int s,char st[100]):Time1(mon,d,h,m,s){ strcpy(str,st); } void show(){ Time1::Print(); cout<<str<<endl; } ~Str(){ delete [] month ; } //деструктор }; class Sob: public Time1{ char str[100]; public: Sob():Time1(){} Sob(char *mon,int d,int h,int m,int s,char st[100]):Time1(mon,d,h,m,s){ strcpy(str,st); } void show(){ Time1::Print(); cout<<str<<endl; } ~Sob(){ delete [] month ; } //деструктор }; struct Spisok{ Time1 *a; //изначально тип объекта родительский в последствии надеюсь привести к одному из потомков Spisok *next; Spisok *prev; }; пытался приводить примерно так tek ->next = new(Spisok); //tek указатель на текущий элемент tek->next->a = new Str; dynamic_cast<Str *>(tek->next->a); и даже если это и работает и все действительно приводится то как мне потом вызвать функцию вывода на экран из потомка (предлагается только родительская) |
Автор: Игорек 4.1.2011, 19:27 | ||||
Реализовать класс – двунаправленный список объектов классов наследников. то есть список должен содержать объекты типа наследников (в моём случае 2х) элементы списка могут содержать различные данные отсюда и приведение берётся... |
Автор: mes 4.1.2011, 19:35 | ||
для содержания приведение (от родителя к наследнику) не нужно... |
Автор: Игорек 4.1.2011, 19:41 | ||||
можно подробнее Добавлено через 10 минут и 17 секунд вроде разобрался |
Автор: mes 4.1.2011, 19:52 |
двух наследников Вы как кого хранить будете ? как родителя ? ну и что еще нужно ? зачем родителя куда то опять приводить ? |