+ Ответить в теме
Показано с 1 по 9 из 9

Тема: Наследование

  1. #1
    developer Monopo is on a distinguished road Аватар для Monopo
    Регистрация
    06.12.2007
    Адрес
    Linux
    Возраст
    20
    Сообщений
    119
    Вес репутации
    11

    Lightbulb Наследование

    Скажите, пожалуйста, как от класса Pair
    Код :
    1. class Pair
    2. {
    3.     public:
    4.     Pair(){A=0;B=0;}
    5.     ~Pair(){}
    6.     private:
    7.     int A,B;
    8. };
    создать производный класс Rational
    Код :
    1. class Rational:public Pair
    , где A и B будут типа float? Как изменится конструирование, деструирование? У меня в процессе программы должен определяться вариант, по которому пойдет счет: целые - Pair или вещественные - Rational.

  2. По умолчанию

     
    Хотите избавиться от рекламы? Зарегистрируйтесь
  3. #2
    system architect BBB is on a distinguished road
    Регистрация
    27.12.2005
    Сообщений
    1,272
    Вес репутации
    15

    По умолчанию Re: Наследование

    Если в классе-родителе A и B объявлениы как int, то каким образом в наследнике они могут поменять типа на float???

  4. #3
    senior developer Albor is on a distinguished road
    Регистрация
    06.09.2004
    Адрес
    Днепропетровск
    Сообщений
    482
    Вес репутации
    14

    По умолчанию Re: Наследование

    Цитата Сообщение от BBB Посмотреть сообщение
    Если в классе-родителе A и B объявлениы как int, то каким образом в наследнике они могут поменять типа на float???
    Да, вроде бы проблем не должно быть. Объект класса
    Rational будет видеть свои переменные A и B типа float. А как изменится конструктор, наверное так как его определить. Во всяком случае после вызова конструктора базового класса, переменные наследника не будут инициализированы, то есть у каждого класса свои A и B.
    Последний раз редактировалось Albor; 22.05.2008 в 09:48.

  5. #4
    Moderator Куратор
    system architect
    Romeo is on a distinguished road Аватар для Romeo
    Регистрация
    02.03.2004
    Адрес
    Крым, Севастополь
    Возраст
    36
    Сообщений
    3,089
    Вес репутации
    21

    По умолчанию Re: Наследование

    Насколько я понял Rational должен быть отнаследован от Pair по той причине, что рациональное число (по определению) может быть представлен, как дробь n/m, где n и m - натуральные числа. Таким образом поля A и B, класса Pair должны играть роль числителя и знаменателя в производном классе Rational. Естественно, было бы красиво, если бы для класса Rational были бы перегружен все основные операции для работы с числами.
    Entites should not be multiplied beyond necessity @ William Occam
    ---
    Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
    ---
    Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

  6. #5
    developer Monopo is on a distinguished road Аватар для Monopo
    Регистрация
    06.12.2007
    Адрес
    Linux
    Возраст
    20
    Сообщений
    119
    Вес репутации
    11

    По умолчанию Re: Наследование

    Да, точно, спасибо. Все получилось.

  7. #6
    developer Monopo is on a distinguished road Аватар для Monopo
    Регистрация
    06.12.2007
    Адрес
    Linux
    Возраст
    20
    Сообщений
    119
    Вес репутации
    11

    По умолчанию Re: Наследование

    Код :
    1. class Trial
    2. {
    3.         public:
    4.         virtual void Print()=0;
    5.     virtual int CheckMark()=0;
    6. };
    7.  
    8. class Test: public Trial
    9. {
    10.         public:
    11.         Test():Name(""),Mark(0){};
    12.         Test(const string& tempn,const int& tx):
    13.         Name(tempn),Mark(tx){};
    14.         Test(const Test&){};
    15.         virtual ~Test(){};
    16.         void Print();
    17.     virtual int CheckMark();
    18.         protected:
    19.         string Name;
    20.         int Mark;
    21. };
    22.  
    23. class Exam: public Trial
    24. {
    25.         protected:
    26.         string Name;
    27.         int Mark;
    28.         public:
    29.         Exam(){};
    30.         Exam(const string& tempn,const int& tx):Name(tempn),Mark(tx){};
    31.         Exam(const Exam&){};
    32.         virtual ~Exam(){};
    33.         void Print(void);
    34.         virtual int CheckMark();
    35. };
    36.  
    37. class OutExam: public Exam
    38. {
    39.         public:
    40.         OutExam():Name(""),Mark(0){};
    41.         OutExam(const OutExam&){};
    42.         OutExam(const string& tempn,const int& tx):
    43.         Name(tempn),Mark(tx){};
    44.         virtual ~OutExam(){};
    45.         void Print();
    46.         virtual int CheckMark();
    47.         protected:
    48.         string Name;
    49.         int Mark;
    50. };
    Как сделать, чтобы typeid(T->item).name() выдавал имена соответствующих классов, а не базового-абстрактного (выводит P5Trial)? У меня есть список типа:
    Код :
    1. struct TItem
    2. {
    3.         Trial *item;
    4.         TItem *next;
    5. };
    Юный Падаван

  8. #7
    Moderator Куратор
    system architect
    Romeo is on a distinguished road Аватар для Romeo
    Регистрация
    02.03.2004
    Адрес
    Крым, Севастополь
    Возраст
    36
    Сообщений
    3,089
    Вес репутации
    21

    По умолчанию Re: Наследование

    У тебя есть жёсткая ошибка. Виртуальный деструктор должен быть у класса Trial, а не у его наследников.

    По вопросу. А ты RTTI включил?
    Entites should not be multiplied beyond necessity @ William Occam
    ---
    Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
    ---
    Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

  9. #8
    developer Monopo is on a distinguished road Аватар для Monopo
    Регистрация
    06.12.2007
    Адрес
    Linux
    Возраст
    20
    Сообщений
    119
    Вес репутации
    11

    По умолчанию Re: Наследование

    Деструкторы поменял. Насчет RTTI.. Ээ.. Нет, не включал)
    Юный Падаван

  10. #9
    Moderator Куратор
    system architect
    Romeo is on a distinguished road Аватар для Romeo
    Регистрация
    02.03.2004
    Адрес
    Крым, Севастополь
    Возраст
    36
    Сообщений
    3,089
    Вес репутации
    21

    По умолчанию Re: Наследование

    Включи и будет тебе счастье
    Entites should not be multiplied beyond necessity @ William Occam
    ---
    Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
    ---
    Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

+ Ответить в теме

Похожие темы

  1. Множественное наследование
    Чтото я не пойму почему не компелируется такой код: class a{ public: a(){} virtual ~a(){} virtual bool f1()=0; virtual bool...
    от ssDev в разделе C и C++
  2. КАК сделать наследование прав доступа при копировании папки?
    Стоит Win XP. Есть 2 папки (Текущие проекты и Шаблон проектов). Их структура: В "Текущие проекты" море проектов (папки Проект 1, Проект 2....)....
    от BelkaJul в разделе Операционные системы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения